2013-07-03 189 views

回答

2

是的,这是有效的,看起来是一个很好的方法来做检查。

如果所有的IApplyChanges也都是ISettingsApplier s,您应该制作IApplyChanges : ISettingsApplier,以使关系更清晰。

4

documentation for is

An是表达式评估为真,如果所提供的表达是 非空,并且所提供的对象可以被强制转换为提供的类型 而不会导致抛出异常。否则,表达式 的计算结果为false。

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

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

2

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

或者,你可以使用IsAssignableFrom,但它的方式更健谈,你必须确保施加不null

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

,如果你想要去的接口转换为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. 
} 
相关问题