Tengo una clase que hereda una interfaz. Un método miembro de la interfaz se implementa en mi clase sin un modificador de acceso (por lo tanto, de forma predeterminada es privado).¿Por qué un método de interfaz C# implementado en una clase debe ser público?
Me aparece el error "no se puede implementar un miembro de la interfaz porque no es público".
¿Por qué no está permitido? ¿No puedo anular la accesibilidad?
Sugeriría que para las clases no selladas, las interfaces cuyas implementaciones no van a exponer a los miembros de la clase pública con los mismos nombres y firmas se implementen usando miembros virtuales protegidos; desafortunadamente, lo más cercano que se puede hacer en C# es tener una implementación de interfaz simplemente llamar a un método virtual protegido. De lo contrario, si una clase derivada vuelve a implementar una interfaz, no habrá forma de llamar a la implementación principal. – supercat
@supercat Tal vez sea pronto, pero no estoy seguro de que te sigo; ¿A qué te refieres con 'De lo contrario, si una clase derivada implementa nuevamente una interfaz, no habrá forma de llamar a la implementación principal? ¿Por qué quiere tener un método protegido implementando una interfaz (no podrá acceder a ella a través de la interfaz en este caso, solo en clases derivadas que quizás ni siquiera sepa qué interfaces están implementando) – Rob
en vb.net , uno puede decir: 'Sub Subdominio Protegido Implantado() Implementa IDoSomething.DoSomething'; el código externo solo podrá llamar a ese método a través de la interfaz, pero una clase derivada podrá anular el método y, dentro de la anulación, llamar al método padre. En C#, sería útil poder utilizar un método protegido para implementar una interfaz, pero las personas a cargo de la especificación no permiten esa opción. Lo más cercano que se puede llegar a es implementar explícitamente la interfaz con un método que llamaría al método protegido 'DoSomethingImpl()'. Tenga en cuenta que ... – supercat