当类被广播到其他接口时,我可以检查它是否实现了一个接口吗
本文关键字:实现 接口 一个 是否 广播 其他接口 检查 我可以 | 更新日期: 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.
}