显式实现的接口属性通常以接口的全名开头。但是,如果它是嵌套接口,则属性的名称将有点不匹配。
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
。这会更正确,不是吗?
答案 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
匹配。尝试访问接口的成员是不可能的,因此解析与实现匹配的名称似乎是合理的。