Почему в C # 3.0, когда мы перегружаем конструктор указанного класса, мы должны написать конструктор по умолчанию в теле класса? - PullRequest
0 голосов
/ 13 апреля 2010

Почему в C # 3.0, когда мы перегружаем конструктор указанного класса, мы должны написать конструктор по умолчанию в теле класса? Насколько я знаю, в этом не было необходимости.

class Test
{
      public int ID {get; private set;}
      public int Name {get; private set;}

      public Test() 
      {
      }

      public Test(int id, int name)
      {
           ....
      }

}    

Спасибо

Ответы [ 3 ]

2 голосов
/ 13 апреля 2010

Позвольте мне перевернуть ваш вопрос: почему бы мне не написать один конструктор для моего класса, чтобы его можно было использовать?

Причина этого в том, что компилятор C # выдаст вам конструктор по умолчанию, когда вы не пишете никаких конструкторов. Просто чтобы нам было легче. Однако, когда вы указываете один или несколько конструкторов, компилятор C # предполагает, что вы указали все необходимые конструкторы. В этом случае он не может использовать конструктор по умолчанию, потому что не у всех классов должен быть конструктор по умолчанию.

Хотя эта функция C # хороша для разработчиков приложений, для разработчиков фреймворков она может раздражать. Некоторые команды в Microsoft всегда пишут конструктор по умолчанию в своем коде C #, потому что, когда у класса нет конструктора (написанного на коде), легко допустить ошибку, добавив альтернативный конструктор в следующем выпуске, без явного указания конструктора по умолчанию. В этом случае новый выпуск будет несовместим, потому что конструктор по умолчанию будет отсутствовать.

1 голос
/ 13 апреля 2010

Для случая, когда класс сериализуется - ваш класс не может быть "повторно обработан", если у него нет конструктора по умолчанию.

Примером этого является случай, когда ваш класс используется в сообщениях в / из веб-службы или когда он сохраняется в каком-либо хранилище, таком как таблица базы данных или файл.

0 голосов
/ 13 апреля 2010

Если ваш класс полезен (вы предоставляете некоторые разумные значения по умолчанию), тогда конструктор по умолчанию хорош, иначе он просто создает больше работы и двусмысленности для пользователя класса.

Согласно вашему примеру, это довольно бесполезно, так как у вас нет доступа к сеттерам (если ваш класс не работает со значениями по умолчанию).

...