我们可以在运行时在C#中有一个默认构造函数的主体吗?

时间:2010-08-24 07:11:10

标签: c# constructor

在一个类中会有一个构造函数。如果程序员定义了那么它肯定会有一个正文。但是如果我们没有定义它,那么构造函数中是否会有一个默认体?

6 个答案:

答案 0 :(得分:3)

如果您有以下课程:

class A { }

编译器将创建一个空构造函数。如果添加一些带初始化的字段,如下所示:

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

...生成的构造函数体将包含将值赋给字段的代码。

答案 1 :(得分:0)

如果将默认构造函数的实现留给编译器(如果不定义它会发生这种情况),那么构造函数会将所有字段初始化为其默认值 E.g。

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

class WithOut<T>
{
  T field;
  string str = "";
}
从功能的角度来看,

将具有相同的默认构造函数

答案 2 :(得分:0)

如果没有定义构造函数,那么编译器将在内部考虑默认的空构造函数。它可用于为该类创建新实例,而不是分配类属性/成员。

答案 3 :(得分:0)

默认构造函数不会执行任何操作,它只是满足类具有构造函数的要求。

答案 4 :(得分:0)

如果您没有定义任何构造函数,则会为您创建一个默认构造函数,但除了将属性设置为其默认值(在类定义中指定,或使用{{1)之外,它不会执行任何操作。运营商)。如果定义无参数构造函数,则它具有您指定的任何主体。如果定义任何带参数的构造函数,则必须手动定义无参数构造函数;在这种情况下,编译器不会为您创建一个。

答案 5 :(得分:0)

您定义的每个类都继承自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,您可以反汇编程序集以查看实际情况。