2011-01-21 19 views
12

Differenza tra interfaccia, classe astratta, classe sigillata, classe statica e classe parziale in C#? Se tutte le classi sono disponibili in vb.net?Differenza tra interfaccia, classe astratta, classe sigillata, classe statica e classe parziale in C#?

+12

Leggere un libro o un'introduzione a C#. O se sei coraggioso, lo spec. ECMA. – leppie

+2

@leppie - Le specifiche ECMA sono sorprendentemente facili da seguire secondo me. – ChaosPandion

+0

@ChaosPandion: Sì, sono d'accordo, ma non per un principiante che non capisce i concetti sottostanti. – leppie

risposta

2

seguito sono le differenze tra astratti e interfaccia:

  1. classi astratte sono dichiarazione di metodo nonché definizione di un metodo che interfacce hanno solo dichiarazione di metodo.

  2. Le classi astratte sono note come classi astratte parziali mentre le interfacce sono conosciute come classi completamente astratte.

  3. Le caratteristiche di classe astratte vengono ereditate dalle classi figlio mentre le caratteristiche di interfaccia devono essere implementate nelle classi di implementazione.

  4. Le classi astratte supportano gli specificatori di accesso mentre le interfacce non supportano gli specificatori di accesso.

  5. Le classi astratte hanno variabili normali e variabili costanti mentre le interfacce non hanno variabili.

  6. Possiamo scrivere costruttori in classi astratte mentre non possiamo scrivere costruttori in interfacce.

+0

"le interfacce non supportano gli specificatori di accesso". - Ho usato esplicitamente interno e pubblico per impostazione predefinita. –

13
  • Interfaccia: definizioni dei metodi solo

  • classe astratta: alcune implementazioni di metodo, alcuni metodi astratti (definizione metodo solo)

  • classe Sealed: Una classe da cui si may non ereditato

  • Classe statica: una classe con solo stati Metodi c (istanze esistono, tutti i metodi possono essere chiamati senza un'istanza)

  • classe parziale: Una classe che definita in 2 o più definizioni classi separate in diversi moduli.

Sì, sono tutti disponibili sia in C# che in VB, sebbene VB utilizzi parole chiave diverse in alcuni casi.

2

Una classe normal può essere istanziata in fase di esecuzione per formare un oggetto con campi (i campi sono proprietà, funzioni, eventi, ecc.). Una classe normal può anche essere ereditata/sottoclassata.

L'aggiunta di una delle parole chiave aggiuntive cambia il modo in cui la classe funziona.

  • L'aggiunta di public, private, protected modifica il modo in cui il codice può vedere e utilizza questa classe.
  • L'aggiunta di static a una classe indica che non è possibile creare un'istanza con la nuova parola chiave, ma è possibile accedervi solo tramite la funzione statica. Esempio: String.IsNullOrEmpty().
  • L'aggiunta di sealed a una classe significa che nessun'altra classe può ereditare la classe "sealed".

Le interfacce sono contracts che dicono che una classe di implementazione fornirà alcune funzionalità. L'interfaccia IDisposable dice che tutte le classi che la implementano avranno una funzione Dispose.

0

In classe astratta è possibile fornire più funzionalità senza influire sulla classe figlio. Nell'interfaccia, se aggiungiamo qualsiasi metodo all'interfaccia, allora interesserà tutta la classe figlio.

+1

Penso che dovresti elaborare più il tuo post per assicurarti che fornisca una risposta adeguata all'OP. Dai anche un'occhiata alle nostre domande frequenti: http://stackoverflow.com/faq. In bocca al lupo. – ForceMagic

3

Immagino che il seguente collegamento sarà utile per voi.

http://letschattechnology.com/interface-vs-abstract-classes/

la differenza logica di base è di creare classe astratta quando v'è una relazione tra due classi che erediterà la classe astratta e si crea l'interfaccia per le classi che non sono legati gli uni agli altri, ma hanno alcune funzionalità comune.

+0

Qualcun altro ha fatto clic su questo link ?? Non mi ha portato a nulla di codice correlato ... era un collegamento piuttosto cattivo per me lol – fifamaniac04

+1

@ fifamaniac04: Mi dispiace, il collegamento era cambiato. Ho aggiornato il collegamento. Dovresti essere in grado di vedere quel post ora. – Sumit

39
  • classe astratta
    dovrebbe essere usata quando v'è un IS-A rapporto e nessun caso dovrebbe essere consentito di essere creati da questa classe astratta. Esempio: un animale è una classe base astratta da cui si possono derivare specifici animali, ad esempio cavallo, maiale ecc. Rendendo Animale astratto non è consentito creare un'istanza Animale.

  • interfaccia
    Un'interfaccia dovrebbero essere utilizzati per implementare la funzionalità in una classe. Supponiamo che vogliamo che un cavallo salti, che possa essere creata un'interfaccia IJumping. Aggiungendo questa interfaccia a Horse, dovrebbero essere implementati tutti i metodi in IJumping. In IJumping solo le dichiarazioni (ad esempio StartJump e EndJump sono definite), in Horse devono essere aggiunte le implementazioni di questi due metodi.

  • classe chiusa
    Facendo cavallo sigillato, non è possibile ereditare da esso, ad esempio fare lezioni come Pony o WorkHorse che ti piacerebbe ereditare da Horse.

  • classe statica
    Per lo più utilizzato per le funzioni di 'utilità'. Supponiamo che tu abbia bisogno di un metodo per calcolare la media di alcuni numeri da utilizzare nella classe Horse, ma non vuoi metterlo in Horse poiché non è correlato e non è correlato agli animali, puoi creare una classe per avere questo tipo di metodi. Non hai bisogno di un'istanza di tale classe di utilità.

  • classe parziale
    una classe parziale non è altro che dividere il file di una classe in più file più piccoli. Una ragione per farlo potrebbe essere quella di condividere solo parte del codice sorgente ad altri. Se il motivo è che il file diventa troppo grande, pensa prima a suddividere la classe in classi più piccole.

+1

eccellente e molto facile. non potrebbe trovare così facile come quello molte grazie –

Problemi correlati