接口的全名和显式实现的属性之间的区别

本文关键字:属性 之间 区别 实现 全名 接口 | 更新日期: 2023-09-27 18:31:42

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

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

接口的全名和显式实现的属性之间的区别

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

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

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