当类被广播到其他接口时,我可以检查它是否实现了一个接口吗

本文关键字:实现 接口 一个 是否 广播 其他接口 检查 我可以 | 更新日期: 2023-09-27 18:20:48

有可能用这种方式检查接口实现吗?

class ProjectSettingsApplier : ISettingsApplier, IApplyChanges
{
}

ISettingsApplier applier = new ProjectSettingsApplier()
if(applier is IApplyChanges)
{
    //Is it true??
}

当类被广播到其他接口时,我可以检查它是否实现了一个接口吗

来自is:的文档

如果提供的表达式为非null,并且所提供的对象可以强制转换为所提供的类型而不会引发异常。否则,表达式计算结果为false。

所以我会说是的,那会奏效的。

也就是说,一个简单的斥责很可能会为你回答这个问题。

是的,这是有效的,看起来是进行检查的好方法。

如果所有的IApplyChanges也是ISettingsApplier,那么应该将IApplyChanges : ISettingsApplier设置为更清晰的关系。

是的,这是合法的,因为applier实际上是在实现IApplyChanges。在您的情况下,评估将是true

或者,你可以使用IsAssignableFrom,但它更健谈,你必须确保应用程序不是null:

typeof(IApplyChanges).IsAssignableFrom(applier.GetType());

这完全可以,但如果你想继续将接口转换为IApplyChanges来使用它,你应该使用as而不是is,就像这样:

ISettingsApplier applier = new ProjectSettingsApplier()
var changer = applier as IApplyChanges;
if (changer != null) // Will only be non-null if it implements IApplyChanges
{
    // Use changer.
}

这样做可以避免双重类型的检查,这并没有那么有效。换句话说,不要这样做:

ISettingsApplier applier = new ProjectSettingsApplier()
if (applier is IApplyChanges) // Type check #1
{
    var changer = (IApplyChanges) applier; // Type check #2: Inefficient.
    // Use changer.
}