Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查对象是否实现了特定的通用接口_C# - Fatal编程技术网

C# 检查对象是否实现了特定的通用接口

C# 检查对象是否实现了特定的通用接口,c#,C#,背景 我的代码库当前具有以下接口和类: //两个DisplayValue\u类_ 公共类显示值 { 公共T值{get;set;} } 公共类DisplayValue:DisplayValue{} //两个IValueWidget_接口_ 公共接口小部件 { DisplayValue值{get;set;} } 公共接口IValueWidget:IValueWidget { 新的显示值{get;set;} } //BaseWidget由所有其他小部件实现 公共接口IBaseWidget { 公共字符

背景

我的代码库当前具有以下接口和类:

//两个DisplayValue\u类_
公共类显示值
{
公共T值{get;set;}
}
公共类DisplayValue:DisplayValue{}
//两个IValueWidget_接口_
公共接口小部件
{
DisplayValue值{get;set;}
}
公共接口IValueWidget:IValueWidget
{
新的显示值{get;set;}
}
//BaseWidget由所有其他小部件实现
公共接口IBaseWidget
{
公共字符串名称{get;set;}
}
代码库还有一组小部件,它们都实现了
IBaseWidget
。有些还实现了
IValueWidget
IValueWidget
,这导致了我的问题

问题

假设我有以下方法:

publict2dostuff(T2小部件),其中T2:IBaseWidget
{
//这应该检查小部件的类型是否正确
if(widget是IValueWidget)
{
}
}
在该方法中,我希望条件与
IValueWidget
IValueWidget
的任何通用版本一起工作。我不管
t
的类型是什么,只关心给定的
T2
可以这样处理

同样值得一提的是,在编译时除了上面提供的类型之外,没有其他类型是已知的。一切都必须在运行时工作

在Java中,我可以这样做,但显然C#没有通配符

publict2dostuff(T2小部件){
if(IValueWidget的小部件实例){
}
}
注释

据我所知,这实际上不是复制品。如果您指的是其中的任何一个,请不要将其标记为这样,因为它们相似但绝对不同:


现在的答案是什么:我很困惑。当你想测试IBaseWidget是否也实现了IValueWidget,而这两个接口又不相关时,为什么还要检查IBaseWidget呢?
IValueWidget
实现了
IValueWidget
,所以你真正要问的是
IValueWidget
接口是否实现了,无论使用何种类型参数
T
。请参阅副本…它完全回答了您的问题。