Perché una classe astratta è forzata a definire tutte le funzioni di un'interfaccia ereditata?

4

Perché il compilatore c # forza un abstract class a definire (al contrario di implementare ) tutti i metodi del interface ereditato? perché non contrassegna i metodi non implementati di un interface ereditato come abstract da solo?

Non sono in grado di apprezzare questo vincolo, è perché i progettisti linguistici volevano che il programmatore della classe astratta fosse più riflessivo mentre sceglieva un metodo per essere - abstract , virtual o non virtuale? O c'è qualcosa di più grande?

    
posta Kapoor 07.05.2016 - 22:44
fonte

2 risposte

8

Perché le classi C # Abstract devono implementare / dichiarare metodi di interfaccia ereditati?

While an abstract class cannot be instantiated, it can have implementation details. The designers of C# chose to force the user to either implement the functionality, or specifically state that the functionality inherited from the interface will not be implemented at this level. It's more of a "tell me you know you left this method out" type of check from the compiler.

C # sempre richiede l'implementazione di tutti i metodi dell'interfaccia. Ma attenua questa restrizione per le classi astratte di che consente di mappare i metodi dell'interfaccia in astratto metodi anziché richiedere di fornire un'implementazione completa.

    
risposta data 08.05.2016 - 02:42
fonte
2

C'è un po 'di più in esso, in quanto è possibile avere lo stesso nome del metodo definito a diversi livelli nella discendenza della classe - e per questi avere diverse implementazioni.

Poiché questa classe astratta sta implementando questa interfaccia, il compilatore deve conoscere l'implementazione di questo metodo per le classi.

Apprezzo che tu possa implicare che sia astratto nel tuo esempio, ma se la tua classe avesse anche una classe base che già implementava questo metodo.

    
risposta data 11.05.2016 - 23:49
fonte

Leggi altre domande sui tag