接口的全名和明确实现它的属性之间的区别

时间:2012-04-20 12:45:15

标签: c#

显式实现的接口属性通常以接口的全名开头。但是,如果它是嵌套接口,则属性的名称将有点不匹配。

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。这会更正确,不是吗?

2 个答案:

答案 0 :(得分:2)

CLR生成的类型名称与C#语言的命名约定不匹配。规范示例是List<int>,CLR类型名称将类似于List'1(反引号)。这不是C#中的有效类型标识符,就像NS.Container + ITest一样无效。

您需要在C#代码中使用C#命名约定。

答案 1 :(得分:0)

如果您假设NS.Container+ITest表示ITest是NS.Container下的嵌套类,则NS.Container+ITest.Prop将成为该接口的成员。但是Prop的实现是Sample(显式实现接口)的成员,它与名称NS.Container.ITest.Prop匹配。尝试访问接口的成员是不可能的,因此解析与实现匹配的名称似乎是合理的。