我试图编写一个构造函数,它接受一些Type
但不是全部。
目前:
public MyClass(Type type)
{
this.Type = type;
}
我想:
public MyClass(typeof(IMyInterface) type)
{
this.Type = type;
}
当然,它没有编译。
有没有办法在C#中实现这个目标?
答案 0 :(得分:2)
你不想要一个类型构造函数,你想要一个泛型类:
public class MyClass<T> where T: IMyInterface
{
}
现在,您可以使用实现该接口的任何其他类型初始化此类:
var sample = new MyClass<OtherClass>();
public class OtherClass : IMyInterface
{
}
答案 1 :(得分:2)
不,你不能拥有这样的动态过滤器。如果您愿意,可以提供实例:您可以将该界面用作类型名称。
否则,您可以抛出异常,或使用泛型以确保仅提供特定类型。
来自一个实例:
public MyClass(IMyInterface instance)
{
this.Type = instance.GetType();
}
例外:
public MyClass(Type type)
{
if (!(typeof(IMyInterface).IsAssignableFrom(type)))
throw new ArgumentException();
this.Type = type;
}
泛型显示在其他答案中。