3

明示的に実装されたインターフェイスのプロパティは、通常、インターフェイスのフルネームで始まります。ただし、ネストされたインターフェイスの場合、プロパティの名前は少し一致しません。

namespace NS
{
    public class Container
    {
        //FullName is NS.Container+ITest
        public interface ITest
        {
            int Prop { get; }
        }
    }

    public class Sample : Container.ITest
    {
        //Property's name is NS.Container.ITest.Prop
        int Container.ITest.Prop { get; }
    }
}

プロパティの名前がそうでないのはなぜNS.Container+ITest.Propですか?または、インターフェイスの名前をNS.Container.ITest。もっと正しいでしょうね。

4

2 に答える 2

2

CLR が生成する型名は、C# 言語の命名規則と一致しません。標準的な例は ですList<int>。CLR 型名はList'1(バッククォート) のようになります。NS.Container+ITest も有効ではないのと同様に、これは C# では有効な型識別子ではありません。

C# コードでは C# 命名規則を使用する必要があります。

于 2012-04-20T13:11:01.653 に答える
0

NS.Container+ITestITest が NS.Container の下にネストされたクラスであることを示すと仮定するとNS.Container+ITest.Prop、インターフェイスのメンバーになります。ただし、 Prop の実装は、 name に一致する Sample のメンバー (インターフェイスを明示的に実装する)NS.Container.ITest.Propです。インターフェイスのメンバーにアクセスしようとすることはできないため、実装に一致する名前を解決することは合理的と思われます。

于 2012-04-20T13:20:28.950 に答える