2013-03-14 14 views
5

Conosco le definizioni delle parole chiave virtual e sealed, ma se non si utilizza nessuno dei due metodi, il metodo può essere sovrascritto per impostazione predefinita?Il metodo C# è sigillato o virtuale per impostazione predefinita?

Vengo da sfondo vb.net. Va in questo modo in vb.net (da MSDN):

Se il modificatore Overridable o NotOverridable non è specificato, l'impostazione predefinita dipende dal fatto che la proprietà o il metodo priorità su una proprietà di classe di base o di un metodo. Se la proprietà o il metodo sostituisce una proprietà o un metodo della classe base , l'impostazione predefinita è Overridable; in caso contrario, è NotOverridable.

Voglio solo sapere se è vero anche in C#.

+8

Il modo più veloce è semplicemente controllarsi, non è più di circa 10 righe di codice da controllare. – Zipper

risposta

5

No, non può. È necessario contrassegnare esplicitamente un metodo come virtuale per consentirne l'override nelle classi derivate.

Ciò che si può fare, tuttavia, è nascondere un metodo utilizzando la nuova parola chiave. (Documentazione MSDN)

La parola chiave sealed viene utilizzata sia per le definizioni di classe che per i metodi. Non consente l'ereditarietà di una classe o la sovrascrittura di un metodo. Per impostazione predefinita, se non si utilizza questa parola chiave, altri saranno in grado di ereditare dalla classe. (MSDN Documentation)

+0

note 'sealed' si applica ai metodi e alle classi. È possibile sigillare un metodo virtuale per impedire che i sottotipi di se stessi vengano ignorati. – Servy

+0

@Servy e così ho imparato qualcosa di nuovo. Grazie! –

+0

Solo per aggiungere che la parola chiave 'new' è implicita per un metodo in una classe derivata che è presente nella classe base come metodo virtuale o non virtuale. La menzione esplicita della parola chiave 'new' nella dichiarazione del metodo nella classe derivata aiuta il programmatore a comprendere l'intento che -" Il metodo che si sta guardando non è interessato a partecipare alla gerarchia delle chiamate ereditarie. " – RBT

6

I metodi predefiniti in C# sono non virtuale.

2

No. Diversamente da Java, in C# i metodi non sono virtual per impostazione predefinita. Né sono sealed, ma non è possibile sovrascriverli, perché sono metodi normali.

2

No, non è possibile sovrascrivere un metodo non virtuale. La nuova parola chiave nasconde solo l'implementazione della classe base e non è una buona pratica.

discussione su questo con Anders Hejlsberg here

Problemi correlati