C#でこれが間違っている理由を誰かに説明してもらえますか:
namespace NamespaceA
{
public class ClassA
{
public interface IInterfaceA
{
String Property
{
set;
}
}
}
}
namespace NamespaceB
{
public class ClassB
{
public class ImpA: NamespaceA.ClassA.IInterfaceA
{
private String mProperty;
public String Property{ set{ mProperty = value; } }
}
public ClassB()
{
ImpA aImpA = new ImpA();
foo(ref aImpA);
}
private void foo(ref NamespaceA.ClassA.IInterfaceA aIInterfaceA)
{
aIInterfaceA.Property = "SomeValue";
}
}
}
これにより、次のコンパイル エラーが発生します。
エラー引数 1: 'NamespaceB.ClassB.ImpA' から 'ref NamespaceA.ClassA.IInterfaceA' に変換できません
インターフェース プロパティを変更して、 からインターフェース関数を呼び出すことは、完全に理にかなっているように思えますfoo()
。キーワードを削除するref
とコンパイルされますが、行った変更foo()
は失われます...