C# 返回特定接口的类型?

C# 返回特定接口的类型?,c#,types,C#,Types,假设存在一个接口IView,其中存在多个实现。 现在有多个其他类具有以下属性: public Type ViewType { get; } 我想确保返回的类型是IView 有没有办法做到这一点?(如其中returnvalue:IView) 请注意,该属性不返回IView的实例 如果是这样的话,会有这样的方式: public T GetView(),其中T:IView{} 另一种方法是在调用属性的任何位置检查返回的类型,但这需要大量代码来进行相同的检查。您的两种解决方案立即浮现在脑海中 也许您可

假设存在一个接口
IView
,其中存在多个实现。
现在有多个其他类具有以下属性:

public Type ViewType { get; }
我想确保返回的类型是
IView

有没有办法做到这一点?(如
其中returnvalue:IView

请注意,该属性不返回
IView
的实例
如果是这样的话,会有这样的方式:
public T GetView(),其中T:IView{}


另一种方法是在调用属性的任何位置检查返回的类型,但这需要大量代码来进行相同的检查。

您的两种解决方案立即浮现在脑海中

也许您可以通过添加一个helper方法来减少检查返回类型的重复:

public bool ViewImplementsIView()
{
    return typeof(this.ViewType).GetInterfaces().Contains(typeof(IView));
}
这将测试封装到您的类中,从而减少了其他地方所需的验证量—如果返回false,您甚至可能在getter上引发异常。

请尝试这种方法

bool ImplementsIView(object t)
{
   return typeof(IView).IsAssignableFrom(typeof(t.GetType()));
}
更新

 bool ImplementsIView(Type t)
    {
       return typeof(IView).IsAssignableFrom(typeof(t));
    }

我不希望属性返回
IView
的实例,而是返回实现
IView
的类型。。那么你到底在问什么呢?这个问题不是很清楚,但我认为你可以将类设置为泛型,并限制泛型参数为IView。然后返回typeof(T)。@LewsTherin:是的!对不起,不清楚@LewsTherin提出了一个很好的观点——您将T的类型限制为那些实现IView的类型,因此您的返回类型是Tis@OleksandrPshenychnyy:问题是某些列表中同时使用了类的多个实例。但是,对于使用不同的
s的泛型类,这将不再可能。好吧,
t
是一个实例,但是我问了如何确保
类型
对象有一个接口。