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

Ste*_*ers 2 c# inheritance interface

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

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

if (this.controls[index].GetType().IsSubclassOf(typeof(MyInterface)))
    ((MyInterface)this.controls[index]).Event += this.Handler;
Run Code Online (Sandbox Code Playgroud)
if (this.controls[index].GetType().IsAssignableFrom(typeof(MyInterface)))
    ((MyInterface)this.controls[index]).Event += this.Handler;
Run Code Online (Sandbox Code Playgroud)
if (this.controls[index].GetType() == typeof(MyInterface))
    ((MyInterface)this.controls[index]).Event += this.Handler;
Run Code Online (Sandbox Code Playgroud)

一切都无济于事.

Dan*_*ant 6

if (typeof(MyInterface).IsAssignableFrom(this.controls[index].GetType()))
    ((MyInterface)this.controls[index]).Event += this.Handler;
Run Code Online (Sandbox Code Playgroud)

你刚IsAssignableFrom倒了.


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

if (this.controls[index] is MyInterface)
Run Code Online (Sandbox Code Playgroud)