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(反引号)。这在 C# 中不是有效的类型标识符,就像 NS.Container+ITest 也是无效的一样。

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

于 2012-04-20T13:11:01.653 回答
0

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

于 2012-04-20T13:20:28.950 回答