この方法でインターフェイスの実装を確認することは可能ですか?
class ProjectSettingsApplier : ISettingsApplier, IApplyChanges
{
}
ISettingsApplier applier = new ProjectSettingsApplier()
if(applier is IApplyChanges)
{
//Is it true??
}
is 式は、指定された式が null でない場合に true と評価され、例外をスローすることなく、指定されたオブジェクトを指定された型にキャストできます。それ以外の場合、式は false と評価されます。
だから私はそう言うでしょう、それはうまくいくでしょう。
とはいえ、単純な再現がこれに答える可能性があります。
はい、それは有効であり、チェックを行う良い方法のようです。
すべてIApplyChanges
がISettingsApplier
sでもある場合はIApplyChanges : ISettingsApplier
、関係を明確にするために、 を作成する必要があります。
はい、applier
実際に実装しているので合法IApplyChanges
です。その場合、評価は になりますtrue
。
または、使用することもできますIsAssignableFrom
が、それはもっとおしゃべりであり、applier がそうでないことを確認する必要があります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.
}