如何实例化一个由参数传递的类型的对象,需要实现某个接口?

时间:2016-01-16 21:20:28

标签: c# types interface instantiation

假设我有一个名为IMyInterface的接口,以及一个名为MyClass的类,它实现了IMyInterface

在另一个类中,我有一个类型为参数的方法,此类型必须实现IMyInterface才有效。例如MyClass将是一个有效的参数。然后在方法中,我将实例化一个由参数传递的类型的对象。

我将如何实现这一目标?如果不可能,哪种解决方案会产生类似的效果?

1 个答案:

答案 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”运算符一样。