Ho una classe che eredita un'interfaccia. Un metodo membro di interfaccia è implementato nella mia classe senza un modificatore di accesso (quindi, per impostazione predefinita è privato).Perché un metodo di interfaccia C# implementato in una classe deve essere pubblico?
Viene visualizzato l'errore "Impossibile implementare un membro di interfaccia perché non è pubblico".
Perché non è consentito? Non posso ignorare l'accessibilità?
Suggerirei che per le classi non sigillate, le interfacce le cui implementazioni non esporranno i membri della classe pubblica con gli stessi nomi e firme dovrebbero essere implementate usando membri virtuali protetti; sfortunatamente, il più vicino può arrivare a farlo in C# è avere un'implementazione dell'interfaccia semplicemente chiamando un metodo virtuale protetto. Altrimenti, se una classe derivata re-implementa un'interfaccia non ci sarà modo di chiamare l'implementazione genitore. – supercat
@supercat Forse è solo presto, ma non sono sicuro di seguirti; cosa intendi con 'Altrimenti, se una classe derivata re-implementa un'interfaccia non ci sarà modo di chiamare l'implementazione genitore? Perché vuoi avere un metodo protetto che implementa un'interfaccia (non sarai in grado di accedervi tramite l'interfaccia in questo caso, solo in classi derivate che potrebbero non sapere nemmeno quali interfacce stanno implementando) – Rob
In vb.net , si può dire: 'Sovraccarico protetto DoSomethingImpl() Implementa IDoSomething.DoSomething'; il codice esterno sarà in grado di chiamare tale metodo solo tramite l'interfaccia, ma una classe derivata sarà in grado di sovrascrivere il metodo e, all'interno dell'override, chiamare il metodo genitore. In C#, sarebbe utile poter usare allo stesso modo un metodo protetto per implementare un'interfaccia, ma i responsabili delle specifiche non consentono questa opzione. Il più vicino possibile sarebbe implementare esplicitamente l'interfaccia con un metodo che chiamerebbe il metodo protetto 'DoSomethingImpl()'. Si noti che ... – supercat