接口的全名和显式实现的属性之间的区别
本文关键字:属性 之间 区别 实现 全名 接口 | 更新日期: 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
匹配。尝试访问接口的成员是不可能的,因此解析与实现匹配的名称似乎是合理的。