2012-05-08 50 views
7

¿Puede alguien decirme qué significa la sintaxis a continuación?¿Qué significa la sintaxis "base"?

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

I mean what is method(argument) : base(argument) {} ??

P.S Este es un constructor de una clase.

+2

Esa es una Constuctor, no un método. – Gabe

+2

Creo que si una pregunta tiene más de 5 respuestas en menos de dos minutos, no debería haberse preguntado. @ Sean87 podría googlear fácilmente la "palabra clave básica de C#" – SimpleVar

+3

[Google le daría una respuesta mucho más rápida] (https://www.google.com/search?q=C%23+base&ie=utf-8&oe=utf-8&aq= t & rls = org.mozilla: en-US: oficial y cliente = firefox-a) luego StackOverflow. (@Yorye Nathan - exactamente mi punto.) – zmilojko

Respuesta

17

La sintaxis :base es una forma para que un tipo derivado se encadene a un constructor en la clase base que acepta el argumento especificado. Si se omite, el compilador silenciosamente intentará unirse a un constructor de clase base que acepta 0 argumentos.

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 
    } 
} 

También existe la sintaxis :this que permite encadenar a los constructores en el mismo tipo con una lista de argumentos especificada

+0

+1: Explicación perfecta. –

+0

** "Si se omite, el compilador silenciosamente intentará unirse a un constructor de clase base que acepta 0 argumentos." ** Esta es la parte más crítica de la explicación, gracias. – Sabuncu

3

Su clase es probable que define así:

MyClass : BaseClass 

Se deriva de alguna otra clase. : base(...) en su constructor llama al constructor apropiado en la clase base antes de ejecutar el código en el constructor de su clase derivada.

Here es una pregunta relacionada.

EDITAR

Como señaló Tilak, la MSDN documentation on the base keyword proporciona una buena explicación.

2

Se llama al constructor de la clase base pasando los argumentos context y attrs

1

clase que hereda de una clase base, y cuando se inicializa un objeto de tipo ScopeCanvas, se llama al constructor base con una lista de parámetros de (context, attrs)

1

Esto significa que este constructor toma dos argumentos, y los pasa al constructor de objetos heredado. Un ejemplo a continuación con solo un argumento.

Public class BaseType 
{ 
    public BaseType(object something) 
    { 

    } 
} 

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

    } 
} 
2

Este es un constructor de la clase sobrecargado abstracta que permite initilizing de argumentos para el y la clase base derivada y especificando si un constructor sobrecargado se va a utilizar. 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

En los ejemplos, sobre todo, estamos hablando de : base de que nadie está tomando sobre base. Sí, la base se usa para acceder al miembro del padre pero no está limitada con el constructor; solo podemos usar base._parentVariable o base._parentMethod() directamente.

base. example

Cuestiones relacionadas