在一个类中会有一个构造函数。如果程序员定义了那么它肯定会有一个正文。但是如果我们没有定义它,那么构造函数中是否会有一个默认体?
答案 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,您可以反汇编程序集以查看实际情况。