我倾向于支持显式接口实现而不是隐式实现,因为我认为针对接口而不是针对实现进行编程通常更可取,而且在处理 Web 服务时,它通常是必要的。
也就是说,我想知道为什么以下内容对于显式接口声明是非法的,而对于隐式声明是合法的:
interface IConnection
{
string ConnectionString { get; }
}
class Connection1 : IConnection
{
// private set is illegal, won't compile
string IConnection.ConnectionString { get; private set; }
}
class Connection2 : IConnection
{
// private set is legal now, it is not part of the interface
string ConnectionString { get; private set; }
}
我知道如何解决这个问题,因为同时拥有显式和隐式接口是合法的,而且我可以使隐式接口实现完全私有。
然而,我想知道这背后的原因。因为从技术上讲,内部编译的私有方法set_IConnection_ConnectionString
不需要是接口的一部分,对吧?它可以被视为一个辅助设置器,而不是接口的一部分,因为它在隐式实现情况下。
更新:作为奖励,您收到的看似令人困惑且在我看来不太正确的编译错误如下:
访问器的可访问性修饰符必须比属性 Connection1.ConnectionString 更具限制性
打扰一下,比更严格private
,怎么……什么?