Почему конструктор по умолчанию не работает при добавлении параметризованного конструктора? - PullRequest
0 голосов
/ 26 августа 2018

Если у нас есть только параметризованный конструктор в классе, то почему мы не можем создать объект с конструктором по умолчанию?как и до добавления параметризованного конструктора, в классе не было конструктора по умолчанию!тем не менее, экземпляр lass может быть создан конструктором по умолчанию.Но после добавления параметризованного конструктора конструктор по умолчанию перестает работать.ПОЧЕМУ?

кто-нибудь может объяснить?

class Program
{
    static void Main(string[] args)
    {
        Test test = new Test(); //instance created using parameterized constructor

        Test2 test = new Test2(); //instance can not be created using default constructor

    }

    class Test
    {
        //no constructor present
    }

    class Test2
    {
        public Test2(int a)
        {
            //parameterized constructor present
        }

    }

}

Ответы [ 3 ]

0 голосов
/ 26 августа 2018

Так был разработан язык. Он обязывает вас всегда указывать параметры, указанные автором класса.

Представьте себе, если у вас был класс, который вы должны предоставить неотрицательное число, чтобы сделать его действительным. Если класс принял конструктор по умолчанию, то вы создали ситуацию, когда класс недопустим. Таким образом, если вы хотите, чтобы конструктор по умолчанию был доступен, то автор класса должен явно указать его, если он добавил конструктор с параметрами.

Вы должны сделать это:

class Test2
{
    public Test2() { }

    public Test2(int a)
    {
        //parameterized constructor present
    }

}
0 голосов
/ 26 августа 2018

По умолчанию, если конструктор не был создан, класс по умолчанию присваивается классу для его инициализации.

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

На основе Microsoft docs вот что происходит:

Если класс не является статическим, классы без конструкторов получаютоткрытый конструктор по умолчанию компилятором C # для включения создания экземпляров классов.

0 голосов
/ 26 августа 2018

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

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

Официальный документ говорит:

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

[....]

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

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

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