假设我有一个名为IMyInterface的接口,以及一个名为MyClass的类,它实现了IMyInterface
在另一个类中,我有一个类型为参数的方法,此类型必须实现IMyInterface才有效。例如MyClass将是一个有效的参数。然后在方法中,我将实例化一个由参数传递的类型的对象。
我将如何实现这一目标?如果不可能,哪种解决方案会产生类似的效果?
答案 0 :(得分:1)
答案分为两部分。首先,您应该按Type.IsAssignableFrom
验证类型:
var implementInterface = (typeof(IMyInterface)).IsAssignableFrom(type);
if(!implementInterface)
// return null, throw an exception or handle this scenario in your own way
接下来,您可以实例化一个对象。这里有几种方法可以动态创建某种类型的对象,一种是使用Activator.CreateInstance
:
// create an object of the type
var obj = (IMyInterface)Activator.CreateInstance(type);
你将在obj中获得MyClass的一个实例。
另一种方法是使用反射:
// get public constructors
var ctors = type.GetConstructors(BindingFlags.Public);
// invoke the first public constructor with no parameters.
var obj = ctors[0].Invoke(new object[] { });
从一个ConstructorInfo返回,您可以使用参数“调用()”它并获取该类的实例,就好像您使用了“new”运算符一样。