gpt4 book ai didi

c# - 按字符串值获取类

转载 作者:IT王子 更新时间:2023-10-29 04:33:31 25 4
gpt4 key购买 nike

我有一个带有一些派生类的抽象类

public abstract class MyObject
{
public string name { get; set; }
public bool IsObject(string pattern);
...
}

public class MyObjectA : MyObject
{
public string name { get { return "MyObjectA"; } set; }
public bool IsObject(string pattern) { ... }
...
}

public class MyObjectB: MyObject
{
public string name { get { return "MyObjectB"; } set; }
public bool IsObject(string pattern) { ... }
...
}

现在我想要一个函数,它根据字符串返回我的特定类 (MyObjectA/MyObectB)。问题是,我有很多 if/else 子句来实现:

public MyObject Create(string pattern)
{
MyObjectA obj = new MyObjectA();
if(obj.IsObject(pattern)
{
return obj;
}
else
{
MyObjectB objb = new MyObjectB();
if(objb.IsObject(pattern);
return objb;
else
...
}
}

这看起来很糟糕。执行此操作的更好方法是什么?

最佳答案

是的,使用反射。

您可以使用 Type.GetType通过字符串获取类的 Type 实例,然后使用 Activator.CreateInstance 实例化它,如下所示:

public MyObject Create(string pattern)
{
Type t = Type.GetType(pattern);
if (t == null) {
throw new Exception("Type " + pattern + " not found.");
}
return Activator.CreateInstance(t);
}

您也可以使用 Activator.CreateInstance(string, string) 重载,但这不会直接返回所需的 Type 的新实例。

关于c# - 按字符串值获取类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13952109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com