默认构造函数和无参数构造函数之间的区别
本文关键字:构造函数 区别 之间 默认 参数 | 更新日期: 2023-09-27 18:33:26
默认构造函数没有参数。您编写的不带参数的构造函数也是如此。那么 c# 的最终区别是什么呢?
除此之外,当您继承默认构造函数和无参数构造函数时,它们在继承类型上公开的是否完全相同?因为我的 IOC 容器似乎不这么认为。(团结(。
干杯皮特
如果您的类不包含显式实例构造函数,则 C# 编译器会添加"默认"构造函数。 它是一个公共的无参数构造函数。 如果您创建了一个显式的非公共无参数构造函数,Unity 将无法像使用公共构造函数那样使用它(无论它是否由编译器生成,也无论它是否具有参数(。
可以通过创建无参数构造函数来覆盖默认构造函数的行为。它的常见用途是,当您将自定义对象作为类的成员,并且您需要在创建类的实例时使用默认值对其进行初始化时。
默认构造函数是无参数构造函数的同义词。
除了 Kainth 和 Leijon @Fredrik@Sachin答案之外,在 .NET(也在 Java 中(中构造函数不是继承的。
显式调用基构造函数,或者默认情况下调用基无参数构造函数。
如果不添加构造函数,则会为您插入一个没有参数的默认构造函数。如果添加构造函数(带或不带参数(,则不会生成默认构造函数
我会让代码自己说话:
public class ThisHasADefaultConstructor
{
}
public class ThisHasAParameterlessConstructor
{
public ThisHasAParameterlessConstructor()
{
}
}
请注意,默认构造函数实际上是在未指定构造函数(带或不带参数(时自动生成的无参数构造函数。
如果你想有更多的构造函数,也许你需要无参数构造函数。假设一个没有参数,一个有参数。
如果您的类只有一个带参数的构造函数,则不允许使用无参数构造函数,除非您定义了一个构造函数,换句话说,如果您在类中定义自定义构造函数,则不会提供默认的无参数构造函数。
MSDN 声明:
不带参数的构造函数称为默认构造函数。每当使用 new 运算符实例化对象并且不向 new 提供任何参数时,都会调用默认构造函数。
因此,不必自动生成默认构造函数。手写的无参数构造函数也是默认构造函数。
当您查看派生类时,这实际上是有意义的:
class A
{
public A() { ... } // do something
public A(object o) { ... } // do something else
}
class B
{
public B() { ... }
}
创建 B 时调用哪个 A 构造函数?默认的。
默认构造函数是指没有参数的构造函数,由自动创建或由您创建。
如果未声明任何其他实例构造函数(带或不带参数(,则会自动创建定义构造函数。(声明静态构造函数不会避免自动创建 defautl 构造函数(。
不继承类层次结构的构造函数,但在使用派生类的构造函数(从层次结构的根开始(时,将调用继承链上的所有构造函数。除非指定要调用的构造函数,否则将调用每个类的默认构造函数。
public class Base
{
public Base()
{
}
}
public class Derived : Base
{
public Derived()
{
}
}
// invokes, the Base() construtor, and then the Derived() constructor
var d = new Derived();
您还可以显式调用基类构造函数,带或不带参数,如下所示:
// Derived class explicitly invoking base class constructor.
public Derived() :base()
{
}
如果需要,可以使用如下参数调用基类构造函数:
public Derived(int j) :base(j)
左右
public Derived() :base(23)
在最后一个代码示例中,如果使用默认构造函数创建 Derived 对象,则基类中调用的构造函数不是默认构造函数,而是具有整数参数的构造函数,使用参数 23 调用。
(当然,这个带参数的构造函数必须存在于基类中(。
只能显式调用中间基类的构造函数。
默认构造器由压缩器隐式调用,除非您显式创建了一个新构造器(没有参数(。