C# 根据参数返回类型的C函数
我想创建一个根据参数返回新对象的函数,例如: 基类:C# 根据参数返回类型的C函数,c#,reflection,C#,Reflection,我想创建一个根据参数返回新对象的函数,例如: 基类: class BaseClass { public int x; } 第一类: class TestClassOne: BaseClass { public TestClassOne() { this.x = 1; } } 第二类: class TestClassTwo: BaseClass { public TestClassOne() {
class BaseClass
{
public int x;
}
第一类:
class TestClassOne: BaseClass
{
public TestClassOne()
{
this.x = 1;
}
}
第二类:
class TestClassTwo: BaseClass
{
public TestClassOne()
{
this.x = 2;
}
}
主要内容:
我写的代码工作得很好,问题是什么时候我会有很多派生类,比如TestClassThree,TestClassThree。。。一千美元。
如果没有if-else或switch-case等,如何生成返回正确构造函数的函数?
我认为反射是一个很好的选择,但我不确定如何使用它。
谢谢 如果你能使用一个通用的方法就最好了,就像勒内的回答一样,但是你使用的是字符串,所以看起来不是这样 有两个步骤: 得到正确的类型; 创建一个实例。 这是所需的最少代码:
Type t = Assembly.GetExecutingAssembly().GetType("SO.BaseClass");
object o = Activator.CreateInstance(t);
正如您所看到的,您需要知道类型的程序集和名称空间,否则您将不得不对其中任何一个进行模糊匹配。我要提醒您的实现。你试图做的事情叫做工厂。考虑到您正在为基类添加依赖项这一事实,您将被限制为仅允许具有该基类的构造函数。如果您曾经需要某些类具有不同的基类,但通过相同的方法提供,那么您将需要共享一个接口。正如其他人所建议的,您可以使用泛型。下面是一个没有泛型的示例:
public static IMyInterface GetMatchingClass(string className)
{
Type t = Type.GetType(className);
return (IMyInterface)Activator.CreateInstance(t);
}
只要返回的类实现了给定的接口,一切都很顺利。您使用字符串来标识所需的类有什么特殊原因吗?不,我只想返回一个派生类,字符串标识是我想到的最好的方法。我认为这比我的答案更有用。我不太确定OP到底想要实现什么。在我的回答中,最后一行可以是BaseClass bc=newtestclassone;,所以我假设OP的类型名是字符串,我认为这很好,但是当我在函数中这样做时,我遗漏了一些东西:type t=Assembly.getExecutionGassembly.GetTypenamespace.TestClassOne;重新运行BaseClassActivator.CreateInstancet;-打印x时,我得到的是0而不是1,这不是由我提供的代码引起的。请检查调试器。是的,可能您在多个位置上有x变量,等等。不是,但到目前为止,我是唯一一个将OP指向工厂模式正确方向的人。我还指出了其他人建议的泛型。我的第一句话说我要提出一个警告。注释不是像我那样提供代码示例的合适位置。区别在于界面的使用。你真的应该在投票前仔细阅读。仅仅回答一个问题并不总是能给你最好的帮助。根据你的批评更新。这已在工作组件中进行了测试。
public static IMyInterface GetMatchingClass(string className)
{
Type t = Type.GetType(className);
return (IMyInterface)Activator.CreateInstance(t);
}