Что такое код: base () - PullRequest
       16

Что такое код: base ()

2 голосов
/ 10 октября 2010

Какова цель base() в следующем коде?

class mytextbox : TextBox
{
    public mytextbox() : base()
    {
        this.Text = "stack";
    }
} 

Почему Во время разработки отображаются сообщения 100

мой код:

 class Class1:TextBox 
{
 public Class1()
 {
     this.Resize += new EventHandler(Class1_Resize);
 }
  void Class1_Resize(object sender, EventArgs e)
  {
      MessageBox.Show("Resize");
  }
}

alt text

Ответы [ 2 ]

10 голосов
/ 10 октября 2010

base() в вашем коде - это вызов конструктора без параметров базового класса myTextBox, который равен TextBox.Обратите внимание, что этот базовый конструктор будет выполнять перед выполнением тела конструктора в производном классе.

Конструктор каждого класса должен в конечном итоге вызывать один из его базового классаконструкторы, напрямую или через цепочечные конструкторы в одном классе.Следовательно, всегда существует неявный / явный base(...) или явный this(...) вызов каждого объявления конструктора.Если он опущен, существует неявный вызов base(), то есть конструктор без параметров базового класса (это означает, что вызов base() в вашем примере является избыточным).Компилируется ли такое объявление или нет, зависит от того, существует ли в базовом классе такой доступный конструктор.

РЕДАКТИРОВАТЬ : две тривиальные точки:

  1. Корень иерархии классов не имеет базового класса, поэтому это правило не применяется к System.Object единственный конструктор.
  2. Первое предложение должно гласить: «Конструктор каждого не System.Object класса, который успешно завершает , должен в конечном итоге вызвать один из его базового класса.конструкторы «.Вот пример с «черепашками на всем пути», где конструктор базового класса никогда не вызывается: создание экземпляра объекта такого класса, очевидно, переполнит стек выполнения.

// Contains implicit public parameterless constructor
public class Base { } 

// Does not contain a constructor with either an explicit or implicit call to base()
public class Derived : Base
{
    public Derived(int a)
        : this() { }

    public Derived()
        : this(42) { }

    static void Main()
    {
        new Derived(); //StackOverflowException
    }
}
2 голосов
/ 10 октября 2010

Понятия не имею, в этом нет необходимости.Конструктор всегда вызывает конструктор базового класса автоматически, без необходимости писать его явно.Но вот что это значит.Вам придется написать его, если вы не хотите вызывать конструктор без параметров, но тот, который принимает аргумент.

...