我有一个继承自接口的类。该接口定义了我想在调用代码中订阅的事件。我尝试了几件事,但他们都决定做错(我知道这是真的)。如何检查类是否实现特定接口。
这是我尝试过的(注意,有问题的对象是一个实现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;
一切都无济于事。
答案 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
开头