检查通用类是否从接口继承

时间:2010-03-30 22:45:25

标签: c# inheritance interface

我有一个继承自接口的类。该接口定义了我想在调用代码中订阅的事件。我尝试了几件事,但他们都决定做错(我知道这是真的)。如何检查类是否实现特定接口。

这是我尝试过的(注意,有问题的对象是一个实现MyInterface的usercontrol,存储在一个控件数组中,其中只有一些实现了MyInterface - 它不是null):

if (this.controls[index].GetType().IsSubclassOf(typeof(MyInterface)))
    ((MyInterface)this.controls[index]).Event += this.Handler;

if (this.controls[index].GetType().IsAssignableFrom(typeof(MyInterface)))
    ((MyInterface)this.controls[index]).Event += this.Handler;

if (this.controls[index].GetType() == typeof(MyInterface))
    ((MyInterface)this.controls[index]).Event += this.Handler;

一切都无济于事。

2 个答案:

答案 0 :(得分:6)

if (typeof(MyInterface).IsAssignableFrom(this.controls[index].GetType()))
    ((MyInterface)this.controls[index]).Event += this.Handler;

您只有IsAssignableFrom倒置。


但是,对于您的情况,执行此测试的最佳方式是以下性能和清晰度改进:

if (this.controls[index] is MyInterface)

答案 1 :(得分:2)

我可能会很紧张,但你不能这样做:

MyInterface foo = this.controls[index] as MyInterface;
if (foo != null) { /* do stuff */ }

(当然真实MyInterface的名称应以I开头