[英]How to instantiate an interface object with implementation that is passed in to current method in C#?
[英]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.