He estado refacturando la base de código del proyecto en el que estoy actualmente para que las clases/interfaces que no son útiles más allá de los límites del ensamblado se declaren como internas (en lugar de públicas) . Pero me he encontrado con un problema con el siguiente código:Cómo implemento miembros de interfaces internas
internal interface IFirstInterface
{
...
}
internal interface ISecondInterface
{
IFirstInterface First{ get; }
...
}
public class Implementer : ISecondInterface
{
public IFirstInterface First {get; private set;}
...
}
Mis preguntas:
¿Por qué los miembros de las interfaces internas tienen que ser aplicadas públicamente? Si implementa la interfaz en una clase interna, ¿no deberían los miembros implementados ser internos? Esto no es un gran problema ya que los miembros de la interfaz no serán accesibles públicamente de todos modos, dado que la clase es interna. Parece contra intuitivo.
El principal problema es con el escenario anterior ya que no puede tener un captador pública para IFirstInterface ya que es supuestamente un ejemplo de interfaz interna me sale el siguiente error del compilador:
accesibilidad inconsistente : propiedad tipo 'IFirstInterface' es menos accesible que propiedad 'Implementer.First'
es allí e cualquier forma de evitar esto?
Nota: Me doy cuenta de que probablemente haya poco valor en este ejercicio de refactorización, pero pensé que sería una buena forma de entender más profundamente las implicaciones del modificador interno.
Si su opción, puede moverse por la limitación de los métodos de interfaz siendo pública mediante el uso de una clase base abstracta en su lugar. –