2011-04-26 69 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

相關問題