声明可赋值给C#中的Type的构造函数参数

时间:2017-11-27 11:15:41

标签: c# types

我试图编写一个构造函数,它接受一些Type但不是全部。

目前:

public MyClass(Type type)
{
    this.Type = type;
}

我想:

public MyClass(typeof(IMyInterface) type)
{
    this.Type = type;
}

当然,它没有编译。

有没有办法在C#中实现这个目标?

2 个答案:

答案 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;
}

泛型显示在其他答案中。