创建一个子类的新实例时,我不想知道它
名称(我很新的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#, 好像这是我想达到的目标。
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
作为参数,并做适当的验证和解析编辑您的构造函数。
我很抱歉能否详细说明一下,我真的很想了解那些代码的作用?以及它会如何帮助我? – ejohansson 2011-04-26 14:47:31
@Hanandel好了,它得到了它=),问题是我不想知道有一个名为NumberNine的类我只想知道它的id,然后决定实例化它。这很难解释这一点。 XD – ejohansson 2011-04-26 14:58:23
这似乎并不像要问什么。它看起来像OP在问我如何创建匿名类,ala Java风格。像'var numberNine = new Token(){override PerformOperation(...){...}}'。 – 2011-04-26 15:05:21
将字符串映射到工厂函数应该很好。 – 2011-04-26 14:53:14