2010-03-31 26 views
8

Ho una struttura di classe comePerché il costruttore base() non è necessario?

abstract class Animal { 
    public Animal(){ 
    //init stuff.. 
    } 
} 

class Cat : Animal { 
    public Cat(bool is_keyboard) : base() //NOTE here 
    { 
    //other init stuff 
    } 
} 

Ora poi, guardare la linea notato. Se rimuovi : base(), verrà compilato senza errori.

Perché è questo? C'è un modo per disabilitare questo comportamento?

risposta

7

C'è un : base() implicito se non si aggiunge altro (qualsiasi : base(...) o : this(...)). Per forzarlo ad essere esplicito, aggiungi un parametro al/ai costruttore/i di base. Quindi non può essere implicito.

Ad esempio:

public Animal(string name) {...} 
+1

fredda, si impara qualcosa di tutti i giorni ... Ho sempre esplicitamente messo di base(), probabilmente continuerà a farlo, perché il numero di sviluppatori rendo conto che ci è una chiamata implicita ad esso? – slugster

+0

Inoltre, ho trovato l'articolo elegante di Skeet che mi ha detto tutto su questo: http://www.yoda.arachsys.com/csharp/constructors.html – Earlz

+0

@slugster, non me ne sono reso conto ... quindi sì. – Earlz

0

perché è questo?

Questo article lo spiega.

C'è un modo per disabilitare questo comportamento ?

No. Mi dispiace (ma ... Si veda la risposta marchio per una soluzione:)

1

17.10.4 Default Constructors:

Se una classe non contiene dichiarazioni costruttore di istanza , un costruttore di istanza predefinita è automaticamente fornito. 2 Il costruttore predefinito richiama semplicemente il costruttore senza parametro della classe di base diretta. 3 Se la classe di base diretta non ha un costruttore di istanze senza parametri accessibile, si verifica un errore in fase di compilazione. 4 Se la classe è astratta , l'accessibilità dichiarata per il costruttore predefinito è protetta. 5 In caso contrario, l'accessibilità dichiarato per il costruttore predefinito è pubblico

+1

Mentre vero, questa è la sezione sbagliata per ciò che accade quando ': base()' viene rimosso. Quella sezione dice cosa succede se viene rimosso l'intero costruttore. –

Problemi correlati