我想知道是否可以使用Reflection或其他方法通过将className作为字符串传递给方法来调用方法中的构造函数。这是在解释命令的上下文中完成的。试图避免切换语句(我在学校有一些奇怪的任务,我正在寻找考试的捷径)。
Class SomeClass
{
//irrelevant code here
public BaseClass SomeMethod(string constructorName)
{
//call constructor here through string parameter to avoid switch statements
//for example string constructorName=SomeDerivedClassName
// and the result should be:
return SomeDerivedClassName(this.SomeProperty,this.SomeOtherPropertY);
}
}
答案 0 :(得分:2)
尝试类似:
class SomeClass
{
//irrelevant code here
public BaseClass SomeMethod(string constructorName)
{
// possibly prepend namespace to 'constructorName' string first
var assemblyToSearch = typeof(SomeClass).Assembly;
var foundType = assemblyToSearch.GetType(constructorName);
return (BaseClass)Activator.CreateInstance(foundType,
this.SomeProperty, this.SomeOtherPropertY);
}
}
当然,如果类可以在不同的程序集中,请相应地修改代码。
这假设有问题的构造函数是public
。