ここの誰かが私がしている間違った仮定を説明できることを願っています。C#4.0には、2つのインターフェイスと、両方を実装するクラスがあります。メソッドでは、最初のインターフェイスのタイプで変数を宣言し、両方のインターフェイスを実装するクラスを使用してインスタンス化し、次のコードのように2番目のインターフェイスに正常にキャストできます。
public interface IFirstInterface
{
void Method1();
}
public interface ISecondInterface
{
void Method2();
}
public class InterfaceImplementation : IFirstInterface, ISecondInterface
{
public void Method1() { }
public void Method2() { }
}
public class SomeClass
{
public void SomeMethod()
{
IFirstInterface first = new InterfaceImplementation();
first.Method1();
// Shouldn't the next line return null?
ISecondInterface second = first as ISecondInterface;
// second is not null and the call to Method2() works fine
second.Method2();
}
}
キャストが成功する理由を理解しようとしています。はい、クラスは両方のインターフェイスを実装しますが、最初の変数はIFirstInterface(ISecondInterfaceから継承しない)として宣言されているため、キャストは失敗するはずです。
'as'を使用しないなど、他の方法でコードを再構築しようとしましたが、キャストは引き続き成功します。
私は何が欠けていますか?