可能重复:
Why Explicit Implementation of a Interface can not be public?
I read this Question。直接问题
interface IRepository<T>
{
void AddString();
}
interface IStringRepo : IRepository<string>
{
List<string> GetStrings();
}
public class BLL : IStringRepo
{
public List<string> FilterStrings()
{
return new List<string>() { "Hello", "World" };
}
public List<string> IStringRepo.GetStrings()
{
throw new NotImplementedException();
}
public void IRepository<string>.AddString()
{
throw new NotImplementedException();
}
}
为什么明确引用的成员公开为Error
?
答案 0 :(得分:1)
为什么将显式引用的成员公开为错误
这是设计理念,想象一下迫使开发人员明确实现接口的最常见原因之一: memeber name ambiguity ,所以你有一个现有的类已经公开了一些公共成员name,您不能更改现有的类API,因为它被其他系统使用,您也无法更改接口API(成员名称/签名),并且类和接口都定义了具有相同名称的成员,因此提供{{1由于已在类中声明了具有相同名称的成员,因此接口成员的acces修饰符没有意义。
MSDN,13.4.1 Explicit interface member implementations
无法访问显式接口成员 通过方法中的完全限定名称实现 调用,属性访问或索引器访问。一个明确的界面 成员实现只能通过接口访问 实例,并且在这种情况下仅由其成员名称引用。
显式接口成员是编译时错误 实现包含访问修饰符,它是一个编译时 包含修饰符abstract,virtual,override或static的错误。
答案 1 :(得分:0)
因为它们不公开所以它是一种冲突
您有choice
实现任一方式 - 显式或隐式。
如果明确的话,通常是 因为实施者希望强迫您仅通过界面访问它,并以某种方式将其隐藏公开(简化) - 因此它不公开。
简而言之,这是明确实施的目的之一。
答案 2 :(得分:-1)
没有任何原因使其成为public
,因为通过与之签订合同,您没有其他选择然后实现其所有成员,如公共
但为什么会出错呢?
因为根据定义,所有接口成员都是公共的。
接口由方法,属性,事件,索引器或任何组成 这四种成员类型的组合。界面不能包含 常量,字段,运算符,实例构造函数,析构函数或 类型。它不能包含静态成员。接口成员是 自动公开,并且不能包含任何访问修饰符。