从另一个构造函数调用构造函数

时间:2010-08-03 04:46:37

标签: c# java oop

我想做这样的事情

public class Class1
    {
       public Class1()
       {

       }
       public Class1(int a)
       {

       }
    }
   public class Class2 :Class1
    {
       public Class2(int a)
       {

       }
       public Class2(): base(2)
       {
         this(2);   // new Class2(2);
       }

    }

我知道这在Java中无法实现(可以在第一行中使用(super或this)之间的一个)

但不知怎的,我需要这种工作如何实现呢?意味着在派生类的默认构造函数中调用基类的参数化和派生类的参数化构造函数。

4 个答案:

答案 0 :(得分:9)

关于构造函数的

MSDN article非常好。以下是一些相关内容:

  

构造函数可以使用base关键字   调用基类的构造函数   类。
  ....
  构造函数可以调用另一个   使用相同对象的构造函数   这个关键字。像基地一样,这可以   与或不与参数一起使用,   以及构造函数中的任何参数   可作为参数,   或作为表达的一部分。

这应该有效:

public class Class1
{
   public Class1()
   {

   }
   public Class1(int a)
   {

   }
}
public class Class2 :Class1
{
   public Class2(int a) : base(a)
   {

   }
   public Class2(): this(2)
   {
   }

}

答案 1 :(得分:2)

Igor的答案是一个很好的例子,说明在这种情况下你应该如何编写构造函数。为了解决最后一句话的更一般情况:你不能链接到多个构造函数。您无法在当前类中调用基本构造函数另一个构造函数。

重载构造函数有两种典型模式。在第一种模式中,派生类的重载集大致匹配基类的重载集 - 您尝试使派生类感觉它有效地继承了构造函数。 (构造函数本身不是继承的,但是如果你提供相同的签名,那么它对调用者来说就像是这样。)当你的派生类不需要其他信息时,通常就是这种情况。当然,每个构造函数都可以具有额外的参数,并且只将子集传递给基础构造函数,但这可能会变得复杂。

在第二种模式中,派生类中有几个构造函数,每个构造函数在同一(派生)类中调用“主”构造函数。此主构造函数具有最多参数,因为它需要能够处理由任何其他构造函数指定的所有。有时,主构造函数应该是私有的,如果某些组合没有意义,但是当您知道只能通过合理的公共构造函数访问代码时,可以方便地在一个地方指定。在这种情况下,只有那个“master”构造函数直接链接到基类构造函数。当派生类有超出基类需要的其他几条信息时,通常会使用此方法。

有这种模式的混合动力车,你有多个主人,过度的“群体”呼叫主人......但我建议你尽可能地保持简单。还要考虑提供静态工厂方法而不是构造函数的可能性 - 最终可以制作更易读的代码,因为您可以根据其目的/参数命名方法 - 例如,请参阅TimeSpan.FromMinutes

答案 2 :(得分:1)

这两种语言都不可能(有充分的理由)。否则,如果没有显式的base或this,则会因为隐式基本调用而多次调用base-constructors。这可能会导致不必要的行为。

答案 3 :(得分:0)

编写多个构造函数和一个Init()方法

在每个构造函数中,您可以编写将其传递给Init方法之前需要执行的任何代码。