默认构造函数和无参数构造函数之间的区别?

时间:2012-05-08 12:27:49

标签: c#

默认构造函数没有参数。并且你写的构造函数也没有参数。那么c#的最终区别是什么?

当你继承默认构造函数和无参数构造函数时,它们在继承类型上暴露的完全相同吗?因为我的IOC容器似乎不这么认为。 (统一)。

干杯, 皮特

11 个答案:

答案 0 :(得分:5)

如果您的类不包含显式实例构造函数,则由C#编译器添加“default”构造函数。它是 public ,无参数构造函数。如果您创建了一个显式的非公共无参数构造函数,Unity将无法以与使用公共构造函数相同的方式使用它(无论这是否由编译器生成,而不管它是否具有参数)。

答案 1 :(得分:3)

您可以通过创建无参数构造函数来覆盖默认构造函数的行为。这种情况的一个常见用途是当您将自定义对象作为类的成员时,需要在创建类的实例时使用默认值对其进行初始化。

答案 2 :(得分:2)

默认构造函数是无参数构造函数的同义词。

答案 3 :(得分:2)

添加到@Sachin Kainth和@Fredrik Leijon答案,在.NET(也在Java中)构造函数不是继承的。

您要么显式调用基础构造函数,要么默认情况下调用基本无参数构造函数。

答案 4 :(得分:1)

如果您不添加构造函数,则会为您插入一个没有参数的默认构造函数。如果添加构造函数(带或不带参数),则不会生成默认构造函数

答案 5 :(得分:1)

我会让代码说明一切:

public class ThisHasADefaultConstructor
{
}

public class ThisHasAParameterlessConstructor
{
   public ThisHasAParameterlessConstructor()
   {
   }
}

请注意,默认构造函数实际上是一个无参数构造函数,在您未指定构造函数(带或不带参数)时自动生成。

答案 6 :(得分:1)

如果你想拥有更多的构造函数,也许你需要无参数构造函数。假设一个没有参数,一个带参数。

答案 7 :(得分:1)

如果您的类只有一个带参数的构造函数,则不允许使用无参数构造函数,除非您定义一个,换句话说,如果您在类中定义了自定义构造函数,则不会提供默认的无参数构造函数。

答案 8 :(得分:0)

MSDN州:

  

不带参数的构造函数称为默认构造函数。只要使用new运算符实例化对象并且没有为new提供参数,就会调用默认构造函数。

因此必须自动生成默认构造函数 not 。手写的无参数构造函数也是默认构造函数

当您查看派生类时,这实际上是有意义的:

class A
{
    public A() { ... } // do something
    public A(object o) { ... } // do something else
}

class B
{
    public B() { ... }
}

在创建B时调用哪个构造函数? 默认一个。

答案 9 :(得分:0)

默认构造函数是指没有参数的构造函数,可以自动创建或由您创建。

如果您没有声明任何其他实例构造函数(包含或不包含参数),则会自动创建defualt构造函数。 (声明静态构造函数不会避免自动创建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调用。

(当然,这个带参数的构造函数必须存在于Base类中。)

您只能显式调用中间基类的构造函数。

答案 10 :(得分:0)

编译器会隐式调用默认构造函数,除非您明确创建了一个新构造函数(没有参数)。