Что делает код C #: - PullRequest
       23

Что делает код C #:

3 голосов
/ 30 октября 2009

В следующем коде:

public class A
{
public A():this(null){}
public A(string b){/*code here*/}
}

Какая польза от первого конструктора?

Ответы [ 7 ]

26 голосов
/ 30 октября 2009

Первый конструктор передает null в параметр b второго конструктора.

Таким образом, если вы позвоните new A(), это будет то же самое, что и вызов new A(null)

5 голосов
/ 30 октября 2009

Когда у вас есть конструктор с параметром

public A(string b){ /* code here */ }

public A():this("") { }  //default

конструктор по умолчанию фактически вызывает «конструктор параметров» с «» в качестве параметра. Вы передаете параметр. Это сделано для того, чтобы избежать написания одного и того же кода дважды

3 голосов
/ 30 октября 2009

это происходит, когда вы перегружаете конструкторы.

в вашем примере пустой конструктор public A():this(null){} ищет конструктор, который может принимать значение объекта null. поскольку строка - это объект, который может принимать значения NULL, он вызывает этот конструктор.

этот пример кажется очень упрощенным.

более значимый пример (но все еще оставаясь базовым):

 public class AddNumbers
{
   public AddNumbers():this(100, 100)
   {     }

   public AddNumbers(int x, int y)
   {     
         int sum = x + y;
         Console.WriteLine(sum.ToString());
   }    
}

в этом примере, когда вызывающая программа вызывает пустой конструктор, она выводит 200. потому что она вызывает метод AddNumbers с x = 100, y = 100.

Я знаю, что это простой пример, но я надеюсь, что это проясняет ситуацию.

3 голосов
/ 30 октября 2009

Это перегрузка конструктора .

Я согласен, что это не очень полезно в этом случае, потому что, скорее всего, неинициализированное значение для строки равно нулю.

См. Также Конструкторы в C #

1 голос
/ 30 октября 2009

Это конструктор по умолчанию, который вызывает second с b == null.

0 голосов
/ 30 октября 2009

При использовании инициализации объекта требуется наличие конструктора по умолчанию без параметров:

Employee e = new Employee() {FirstName="John", LastName="Smith"};

В этом случае я бы, вероятно, не использовал цепочку конструктора. Перегрузка конструктора дает вам альтернативный способ инициализации с параметрами. Цепочка конструктора действительно полезна, если сделать параметры конструктора необязательными; C # не поддерживает необязательные параметры (пока).

«Лучшая практика» будет зависеть от ситуации, использования, архитектуры, требований и т. Д. (Правило номер один для консалтинга ISO: «Это зависит»)

0 голосов
/ 30 октября 2009

Некоторые интерфейсы или дизайнеры требуют наличия конструктора без параметров.

Этот метод пригодится в те времена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...