C# 如何了解接口是否派生自特定接口?
我有这样一个界面:C# 如何了解接口是否派生自特定接口?,c#,reflection,C#,Reflection,我有这样一个界面: public interface IViewA : IViewB, IViewC { byte prop { get; set; } } public void OpenPopup<T>(WindowState state) { if ((typeof(T) as IViewC)!=null) { //Process A } else { //Process B }
public interface IViewA : IViewB, IViewC
{
byte prop { get; set; }
}
public void OpenPopup<T>(WindowState state)
{
if ((typeof(T) as IViewC)!=null)
{
//Process A
}
else
{
//Process B
}
我有一个这样的通用方法:
public interface IViewA : IViewB, IViewC
{
byte prop { get; set; }
}
public void OpenPopup<T>(WindowState state)
{
if ((typeof(T) as IViewC)!=null)
{
//Process A
}
else
{
//Process B
}
public void OpenPopup(WindowsState状态)
{
如果((T的类型为IViewC)!=null)
{
//过程A
}
其他的
{
//过程B
}
}
虽然我将T作为从IViewC派生的接口发送,但进程A未被处理
那么,如何在运行时通过反射了解一个接口是否派生自其他接口呢
谢谢而不是
typeof
使用isAssignableFrom
尝试以下操作
if ( typeof(IViewC).IsAssignableFrom(typeof(T)) {
...
}
这是错误的。您编写的内容测试typeof(T)
返回的Type
对象是否是IViewC
,而它显然不是
你想要:
if (typeof(IViewC).IsAssignableFrom(typeof(T))
尝试类似于
typeof(IViewC)的方法。IsAssignableFrom(typeof(T))
现在您正试图将typeof(T)
视为系统。将视为IViewC
,这将不起作用。typeof(T)视为IViewC
是完全错误的。您正在尝试从类型
转换到IViewC
,这将始终失败,始终导致null
您需要typeof(T).GetInterfaces()
,然后查看返回的列表,看看您的接口是否在其中。typeof(T)
将始终是一个系统。type我认为这也是错误的。C#中的“is”运算符只能用于参考值。T是泛型类型参数。请显示示例代码。我这样问是因为我认为答案两者都需要。