Почему не допускается назначение объекта в классе вне метода - PullRequest
0 голосов
/ 01 октября 2019

В любом классе c # это разрешено

Class Program
{
 Dub obj=new Dub()
}

Но не это

Class Program
{
Dub obj1= null;
Obj1=new Dub();
}

Попробуйте это только в классе, но не в любой функции.

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

Язык предназначен для отделения ваших «вещей» (полей классов и свойств классов) от того, как их использовать (методы). Однако некоторые вещи являются просто синтаксическим сахаром , что позволяет вам быть более кратким.

Фактически, ваш код

Class Program
{
    Dub obj=new Dub()
}

функционально (и семантически) эквивалентенэто

Class Program
{
    Dub obj;

    public Program()
    {
        obj = new Dub();
    }
}

, потому что оно объявляет поле (Dub obj - это часть кода, которая делает это), а затем инициализирует его при создании (= new Dub() - это то, как вы говорите, что хотите, чтобы оно было инициализировано).

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

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

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

0 голосов
/ 01 октября 2019

Инструкция не разрешена в разделе объявления членов класса.

Инструкции должны быть помещены в метод.

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

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

Вы можете узнать, что такое класс с полями, свойствами и методами членов, прочитав эти руководства:

C # Class

C # Classes

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