繁体   English   中英

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

[英]How to instantiate an object of a type passed by parameter, that needs to implement a certain interface?

可以说我有一个名为IMyInterface的接口和一个实现了MyyInterface的名为MyClass的类

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

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

答案有两个部分。 首先,您应该通过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之一中,您可以使用参数对其进行“ Invoke()”,并获得该类的实例,就好像您使用的是“ new”运算符一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM