2011-04-26 32 views
1

名称(我很新的C#如此忍受我,开始3天前)创建一个子类的新实例时,我不想知道它

好,这里是一般结构和理念

namespace Tokenize{ 
    abstract class Token{ 
     public Base(object id){ 
      this.id = id; 
     } 
     private object id; 
     public object Id 
     { 
      get{...}; 
      set{...}; 
     } 
     public abstract object PerformOperation(object a, object b); 

    } 

    class NumberNine: Base{ 
     public NumberNine(int num) : base(num){ } 
     public override int PerformOperation(int a, int b); 
    } 

    class LetterT: Base{ 
     public LetterT(char letter) : base(letter){ } 
     public override string PerformOperation(string a, char b); 
    } 
} 
using Tokenize; 
namespace Program{ 
    class MyProg{ 
     static void Main(string[] args) 
     { 
       Token token; 
       Stack stack; 
       //..... 
       //Read some input 
       string s = "T"; 
       //..... 
       if(s==anonymousDerivedClassId){ 
        //How do I come up with class LetterT and keep it anonymous? 
        Token token = new anonymousDerivedClass(); // 
        stack.Push(token) 
       } 
       //..... 
       //do some stuff 
       //..... 
       object a; 
       object b; 
       Token q = stack.Pop(token); 
       q.PerformOperation(a,b); 

     } 
    } 
} 

我想创建一个子类,其中i 不想知道它的名字的新实例?

我“不知道”是否存在?

希望这不是太复杂......

编辑:

我不想跟踪基本上所有的子类的...

EDIT2(新例如):

考虑:

static void Main(string[] args) 
    { 
     Operator op; 
     string s = "*"; 
     if(s==MulOperator.Identifier){ 
      op = new MulOperator(); 
     } 
     else{ 
      op = new DivOperator(); 
     } 

     perform(op); 

    } 
    static void perform(Operator op) 
    { 
     Console.WriteLine("Sum:{0}", op.PerformOperation(2.2,2.0)); 
    } 

我想摆脱new MulOperator()MulOperator.Identifier与更通用的方法创建在这种情况下,Operator的子类。

编辑3:*

(解决方案) 我要去尝试A Generic Factory in C#, 好像这是我想达到的目标。

+2

将字符串映射到工厂函数应该很好。 – 2011-04-26 14:53:14

回答

2
string s = "T"; 
string typeName = string.Empty; 

// Determine whether s is a letter or digit 
if (Char.IsDigit(s[0])) 
{ 
    typeName = "Digit" + s; 
} 
else if (Char.IsLetter(s[0])) 
{ 
    typeName = "Letter" + s; 
} 

// Get real type from typeName 
Type type = Type.GetType(typeName); 

// Create instance of type, using s as argument 
object instance = Activator.CreateInstance(type, new object[] { s }); 

你必须让他们采取string s作为参数,并做适当的验证和解析编辑您的构造函数。

+0

我很抱歉能否详细说明一下,我真的很想了解那些代码的作用?以及它会如何帮助我? – ejohansson 2011-04-26 14:47:31

+0

@Hanandel好了,它得到了它=),问题是我不想知道有一个名为NumberNine的类我只想知道它的id,然后决定实例化它。这很难解释这一点。 XD – ejohansson 2011-04-26 14:58:23

+0

这似乎并不像要问什么。它看起来像OP在问我如何创建匿名类,ala Java风格。像'var numberNine = new Token(){override PerformOperation(...){...}}'。 – 2011-04-26 15:05:21

相关问题