Когда у меня есть открытый интерфейс
public interface IPub { string Foo { get; set; } }
, тогда я могу реализовать этот интерфейс, либо сделав его явно:
public class CFoo : IPub { string IPub.Foo { get; set; } }
или неявно, используя модификатор public
:
public class CFoo : IPub { public string Foo { get; set; } }
.Имеет смысл: модификатор должен быть public
, потому что интерфейс public
.
Но когда у меня есть внутренний интерфейс
internal interface IInt { string Bar { get; set; } }
, тогда я могу реализовать его только явно:
public class CBar : IInt { string IInt.Bar { get; set; } }
или неявно с модификатором public
:
public class CBar : IInt { public string Bar { get; set; } }
, но НЕ с модификатором internal
:
public class CBar : IInt { internal string Bar { get; set; } }
// compiler error:
// 'CBar' does not implement interface member 'IInt.Bar'.
// 'CBar.Bar' cannot implement an interface member
// because it is not public.
Это не имеет смысла.Зачем мне нужен модификатор public
, когда интерфейс только internal
?Существуют ли какие-либо технические причины, по которым public
всегда следует использовать в неявных реализациях интерфейса, или разработчики на C # сделали это по-другому (без необходимости что-либо менять в языке)?