#c# #oop
#c# #ооп
Вопрос:
Я новичок в ООП.
Я прочитал, что «конструктор, который не принимает аргументов, называется конструктором по умолчанию».
Является ли приведенный ниже конструктор конструктором по умолчанию?
Class A
{
int a;
string b;
public A()
{
a=10;
b="Test";
}
}
Комментарии:
Ответ №1:
Да, это так, поскольку у него нет никаких параметров / аргументов.
Примером конструктора, отличного от конструктора по умолчанию, может быть:
public A(int a)
{
this.a = a;
}
Комментарии:
1. Спасибо a lot…So необязательно, чтобы конструктор по умолчанию устанавливал членам значения по умолчанию (a = 0 и b = null)?
2. @Alvin: Да, это правильно. Как упоминают другие, конструктор называется конструктором «по умолчанию» только потому, что компилятор по умолчанию вставит пустой конструктор без параметров, если в вашем коде нет конструкторов, явно написанных.
3. Нет, не обязательно, чтобы вы устанавливали переменные вашего экземпляра в конструкторе по умолчанию, но это хорошая практика для этого. Я рекомендую вам всегда устанавливать переменные вашего экземпляра в конструкторе, если только вы не собираетесь использовать отложенную инициализацию в свойстве или что-то еще.
4. @Kevin: Когда вы говорите «установите переменные вашего экземпляра», вы имеете в виду их значения по умолчанию (0, null и т.д.) Или значения, отличные от значений по умолчанию?
5. @Zach Они просто говорят, что хорошей практикой является установка переменных на что-то. Вам не нужно устанавливать для них значения типов по умолчанию.
Ответ №2:
Да, это конструктор по умолчанию, и если вы не реализуете его в своем коде, компилятор c # автоматически введет в класс проверку этого
Ответ №3:
Если вы ссылаетесь на спецификацию C # 4:
10.11.4 Конструкторы по умолчанию Если класс не содержит объявлений конструктора экземпляра, автоматически предоставляется конструктор экземпляра по умолчанию. Этот конструктор по умолчанию просто вызывает конструктор без параметров базового класса direct.
и для типов значений:
4.1.2 Конструкторы по умолчанию Все типы значений неявно объявляют общедоступный конструктор экземпляра без параметров, называемый конструктором по умолчанию. Конструктор по умолчанию возвращает экземпляр с нулевой инициализацией, известный как значение по умолчанию для типа значения
Ответ №4:
Да, это общедоступный конструктор по умолчанию в C # (и Java). Если вы явно не объявите его, компилятор создаст для вас пустой конструктор по умолчанию. Однако, если вы объявите конструктор с параметрами, но не конструктор по умолчанию (без параметров), то компилятор не будет автоматически генерировать для вас конструктор по умолчанию.
Ответ №5:
Нет, это не конструктор по умолчанию. Конструктор по умолчанию — это тот, который вызывается автоматически при создании экземпляра класса, у которого нет определения конструктора. Как только вы определяете конструктор с нулевыми аргументами, вы переопределяете конструктор по умолчанию своим пользовательским конструктором. И это то, что вы делаете выше.
Чтобы понять это, удалите свой конструктор и установите значения переменных класса a и b равными 10 и «pankaj» соответственно.
А затем создайте экземпляр класса A defaultConst = new A();
и получите доступ к значениям для a и b.
Комментарии:
1. Конструктор без параметров по-прежнему обычно называется конструктором по умолчанию, даже если вы переопределяете автоматически созданный.
2. @Pankaj: Спасибо!! Теперь я получил a и b равными 10, а «pankaj» означает, что конструктор по умолчанию установил значения элементов, которые я установил, а не a = 0 или b = null. В конечном счете, я хочу сказать, что я нашел в типах конструкторов — default, parameterized, private, static….so переопределенный выше должен находиться в категории DEFAULT? (ничто не вызывается как пользовательский конструктор)
3. @BitOff : Вы можете проверить исходные тексты и сами понять, что это значит, когда мы используем слово «По умолчанию». То, что я ответил, является наиболее правильным из всех приведенных выше ответов
4. @Alvin, да, вы можете назвать это пользовательским конструктором по умолчанию, но не конструктором по умолчанию.