2012-05-08 17 views
7

Qualcuno può dirmi per favore cosa significa la seguente sintassi?Che cosa significa la sintassi "base"?

public ScopeCanvas(Context context, IAttributeSet attrs) : base(context, attrs) 
{ 
} 

Voglio dire che cosa è method(argument) : base(argument) {} ??

P.S Questo è un costruttore di una classe.

+2

Questo è un constuctor, non un metodo. – Gabe

+2

Credo che se una domanda ha più di 5 risposte in meno di due minuti, non dovrebbe essere stato chiesto. @ Sean87 potresti facilmente google "C# base keyword" – SimpleVar

+3

[Google ti darebbe una risposta molto più veloce] (https://www.google.com/search?q=C%23+base&ie=utf-8&oe=utf-8&aq= t & rls = org.mozilla: en-US: ufficiale & client = firefox-a) quindi StackOverflow. (@Yorye Nathan - esattamente il mio punto.) – zmilojko

risposta

17

La sintassi :base è un modo per un tipo derivato da associare a un costruttore della classe base che accetta l'argomento specificato. Se omesso, il compilatore tenterà silenziosamente di collegarsi a un costruttore della classe base che accetta 0 argomenti.

class Parent { 
    protected Parent(int id) { } 
} 

class Child1 : Parent { 
    internal Child1() { 
    // Doesn't compile. Parent doesn't have a parameterless constructor and 
    // hence the implicit :base() won't work 
    } 
} 

class Child2 : Parent { 
    internal Child2() : base(42) { 
    // Works great 
    } 
} 

V'è anche la :this sintassi che consente di concatenamento per costruttori nello stesso tipo con un elenco argomento specificato

+0

+1: spiegazione perfetta. –

+0

** "Se omesso, il compilatore tenterà silenziosamente di collegarsi a un costruttore della classe base che accetta 0 argomenti." ** Questa è la parte più critica della spiegazione - grazie. – Sabuncu

3

la classe è probabilmente definito in questo modo:

MyClass : BaseClass 

Deriva da qualche altra classe. : base(...) sul costruttore chiama il costruttore appropriato nella classe base prima di eseguire il codice nel costruttore della classe derivata.

Here è una domanda correlata.

EDIT

Come notato da Tilak, il MSDN documentation on the base keyword fornisce una buona spiegazione.

2

Si chiama il costruttore dalla classe base passando gli argomenti context e attrs

1

Si classe eredita da una baseclass e quando intializzi un oggetto di tipo ScopeCanvas, il costruttore base viene chiamato con un elenco di parametri di (context, attrs)

1

Ciò significa che questo costruttore prende due argomenti, e li passa al costruttore oggetti ereditato. Un esempio sotto con un solo argomento.

Public class BaseType 
{ 
    public BaseType(object something) 
    { 

    } 
} 

public class MyType : BaseType 
{ 
    public MyType(object context) : base(context) 
    { 

    } 
} 
2

Questo è un estratto costruttore di classe overload che consente initilizing di argomenti per l'e la classe base derivata e specificando se un costruttore di sovraccarico deve essere utilizzato. LINK

public class A 
{ 
    public A() 
    { } 
    public A(int size) 
    { } 
}; 

class B : public A 
{ 
    public B() 
    {// this calls base class constructor A() 
    } 
    public B(int size) : base(size) 
    { // this calls the overloaded constructor A(size) 
    } 
} 
0

Negli esempi soprattutto stanno parlando : base nessuno sta prendendo su base. Sì base è utilizzato per accedere al membro del genitore ma non è limitato al costruttore, ma possiamo usare direttamente base._parentVariable o base._parentMethod().

base. example

Problemi correlati