2011-03-17 11 views
7

Come e quando chiamare il costruttore della classe base in C#Come e quando chiamare il costruttore della classe base in C#

+0

possibile duplicato del [Calling costruttore di base in C#] (http://stackoverflow.com/questions/12051/calling-base-constructor-in- c) e [C# Calling Constructor Base Class] (http://stackoverflow.com/questions/4212624/c-calling-base-class-constructor) –

risposta

14

è possibile chiamare il costruttore della classe base in questo modo:

// Subclass constructor 
public Subclass() 
    : base() 
{ 
    // do Subclass constructor stuff here... 
} 

si potrebbe chiamare il classe base se c'è qualcosa che tutte le classi figlio devono avere l'installazione. oggetti che devono essere inizializzati, ecc ...

Spero che questo aiuti.

+5

Puoi anche chiamare il costruttore della classe base in questo modo: 'Sottoclasse pubblico() {} '- questo ha esattamente lo stesso comportamento del tuo esempio. –

7

In genere è consigliabile chiamare il costruttore della classe base dal costruttore della sottoclasse per assicurarsi che la classe di base si inizializzi prima della sottoclasse. Si utilizza la parola chiave base per chiamare il costruttore della classe base. Nota che puoi anche chiamare un altro costruttore nella tua classe usando la parola chiave this.

Ecco un esempio su come farlo:

public class BaseClass 
{ 
    private string something; 

    public BaseClass() : this("default value") // Call the BaseClass(string) ctor 
    { 
    } 

    public BaseClass(string something) 
    { 
     this.something = something; 
    } 

    // other ctors if needed 
} 

public class SubClass : BaseClass 
{ 
    public SubClass(string something) : base(something) // Call the base ctor with the arg 
    { 
    } 

    // other ctors if needed 
} 
+6

Non è solo una buona pratica, è un requisito imposto dal compilatore. [Un costruttore di base verrà chiamato se ti piace o meno.] (Http://stackoverflow.com/questions/3265958/how-can-i-tell-the-inheriting-class-to-not-call-its- base-class-parameter-less-co) –

+1

Buon punto ... chiamerà il ctor predefinito se non si chiama esplicitamente un operatore specifico. –

+0

In Flash/AS3, è possibile eseguire il lavoro nel costruttore sottoclasse, quindi chiamare parzialmente "super()" per eseguire il costruttore della classe base, quindi continuare con più codice nel costruttore della sottoclasse. In C#, si è costretti a chiamare prima il costruttore della classe base, prima che venga eseguito qualsiasi codice nel costruttore della sottoclasse. – Triynko

Problemi correlati