I guess the conflict that the C# designers have seen was that you cannot implement an interface with an internal
member outside of the declaring assembly (and friend assemblies). Of course, it could still be useful to do this if outside assemblies only consume the interface. On the other hand you can get this behavior with a second internal
-only interface:
public interface IPublic { /* all public members */ }
internal interface IPrivate : IPublic { /* additional members */ }
And your own classes implement IPrivate
. External code can only use IPublic
.