2012-05-08 4 views
7

Может ли кто-нибудь рассказать мне, что означает синтаксис ниже?Что означает синтаксис «base»?

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

Я имею в виду, что такое method(argument) : base(argument) {} ??

P.S Это конструктор класса.

+2

Это constuctor, а не метод. – Gabe

+2

Я считаю, что если вопрос имеет более 5 ответов менее чем за две минуты, его не следует спрашивать. @ Sean87 вы можете легко найти ключевое слово «C# base» для Google » – SimpleVar

+3

[Google даст вам гораздо более быстрый ответ] (https://www.google.com/search?q=C%23+base&ie=utf-8&oe=utf-8&aq= t & rls = org.mozilla: ru-US: official & client = firefox-a), затем StackOverflow. (@Yorye Nathan - точно моя точка.) – zmilojko

ответ

17

Синтаксис :base - способ для производного типа привязать к конструктору базового класса, который принимает указанный аргумент. Если опустить, компилятор будет молча пытаться привязываться к конструктору базового класса, который принимает 0 аргументов.

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

Существует также :this синтаксис, который позволяет цепочки конструкторам в том же типе с указанным списком аргументов

+0

+1: Идеальное объяснение. –

+0

** «Если пропустить, компилятор будет тихо пытаться привязываться к конструктору базового класса, который принимает 0 аргументов». ** Это самая важная часть объяснения - спасибо. – Sabuncu

3

Ваш класс, вероятно, определяется следующим образом:

MyClass : BaseClass 

Это происходит из какого-то другого класса. : base(...) на вашем конструкторе вызывает соответствующий конструктор в базовом классе перед запуском кода в конструкторе производного класса.

Here вопросы касательно.

EDIT

Как отметил Тилаком, то MSDN documentation on the base keyword обеспечивает хорошее объяснение.

2

Он вызывает конструктор базового класса, проходящей аргументы context и attrs

1

Вы класс наследуется от базовый класс, а когда вы инициализируете объект типа ScopeCanvas, базовый конструктор вызывается со списком параметров (context, attrs)

1

Это означает, что этот конструктор принимает два аргумента, и передает их в наследство объектов конструктора. Пример ниже с одним аргументом.

Public class BaseType 
{ 
    public BaseType(object something) 
    { 

    } 
} 

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

    } 
} 
2

Это абстрактный класс перегружен конструктор, который позволяет initilizing аргументов для производного и базового класса и указание, если перегруженный конструктор должен быть использован. 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

В приведенных выше примерах все говорят о : база никто не принимает около базы. Да база используется для доступа к члену родителя, но не ограничивается конструктором, мы можем использовать base._parentVariable или base._parentMethod() напрямую.

base. example