检查对象是否遵循(不是实现)接口

时间:2015-03-25 10:21:27

标签: c#

如何检查某个对象是否符合(但未实现)某个界面(例如Google Go中的内容:Interfaces are satisfied implicitly)?

例如:

class Foo
{
    void Bar() { ... }
}

interface IBar
{
    void Bar();
}

在这种情况下,课程Foo会隐式/符合接口IBar ...
有没有办法检查这个(可能是反射)?

感谢。 : - )

1 个答案:

答案 0 :(得分:2)

这称为duck typing,可以使用图书馆:DeftTech.DuckTyping

bool adheres = DuckTyping.CanCast<IBar, Foo>();

DynamicProxy也可能有帮助,或者您可以从其他项目中找到nuget包。

此功能不是由语言提供的,因此,正如您所猜测的,鸭子类型库在内部使用反射。如果您需要更多详细信息,DeftTech.DuckTyping是开源的。