Можем ли мы иметь тело для конструктора по умолчанию в C # во время выполнения? - PullRequest
3 голосов
/ 24 августа 2010

В классе будет конструктор. Если программист определит, что тогда он определенно будет иметь тело.Но если мы не определим его, будет ли в этом конструкторе тело по умолчанию?

Ответы [ 6 ]

3 голосов
/ 24 августа 2010

Если у вас есть следующий класс:

class A { }

Там будет пустой конструктор, созданный компилятором.Если вы добавите поле с инициализацией, например, так:

class A 
{ 
    private string someField = "some text";
}

... сгенерированное тело конструктора будет содержать код для присвоения значения полю.

0 голосов
/ 24 августа 2010

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

public object()
{
}

Итак, если у вас есть такой класс:

public sealed class Person
{
    public string Name = string.Empty;
    public string Firstname = string.Empty;
    public string Middlename = string.Empty;

    public string Fullname
    {
        get { return string.Concat(Name, Firstname, Middlename); }
    }

}

Тогда конструктор будет выглядеть так ...

public Person()
{
    this.Name = string.Empty;
    this.Firstname = string.Empty;
    this.Middlename = string.Empty;
}

РЕДАКТИРОВАТЬ: Если вы используете .NET Reflector, вы можете разобрать сборки, чтобы посмотреть, что на самом деле происходит.

0 голосов
/ 24 августа 2010

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

0 голосов
/ 24 августа 2010

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

0 голосов
/ 24 августа 2010

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

0 голосов
/ 24 августа 2010

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

class With<T>
{
  T field;
  string str;
  With()
  {
    field = default(T);
    str = "";
  }
}

class WithOut<T>
{
  T field;
  string str = "";
}

будет с функциональной точки зрения иметь тот же конструктор по умолчанию

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