将类继承到构造函数

时间:2014-02-07 10:58:19

标签: c# oop

public class abc
{
    public abc():this(new pqr())
    {}
}

上面的代码表示构造函数abc()由某个类继承。

上述代码是什么意思?

何时使用此类代码?

为何使用它?

4 个答案:

答案 0 :(得分:5)

  

上面的代码表示构造函数abc()由某个类继承。

不,不。

这意味着无参数abc构造函数链接到abc构造函数的pqr

所以你真的有:

public class Foo
{
    public Foo() : this(new Bar())
    {
    }

    public Foo(Bar bar) // implicit call to parameterless base constructor
    {
        // Do something with bar here
    }
}

有关详细信息,请参阅我的article on constructor chaining

至于你什么时候想要这样做 - 这真是太宽泛了。但作为一个例子,假设你有TimeOfDay类型 - 你可能想要构造函数:

public TimeOfDay(int hour, int minute)
public TimeOfDay(int hour, int minute, int second)
public TimeOfDay(int hour, int minute, int second, int millisecond)

答案 1 :(得分:1)

 public abc():this(new pqr())

此行表示在相同类中有另一个带参数的构造函数。当您在代码中调用new abc()时,实际上会调用构造函数new abc(var param)并为其指定一定值(此处为new pqr())。

答案 2 :(得分:1)

您的代码是构造函数链的(未完成的)示例:

public class abc {
  // To finish the example, you have to add one constructor more:
  // You can omit ": base()" here,
  // base class constructor will be called by default
  public abc(pqr value): base() {...}

  // Explicit chain: when initializing like that "new abc()"
  // call constructor above "abc(pqr value)" 
  // with "new pqr()" value
  public abc(): this(new pqr()) {}
}

您不能继承构造函数,而是,例如:

  public class a {
    public a(int value) {...}
  }

  public class b: a {
    // b doesn't inherit any "a" constructors, 
    // (you can't call "b(1)" unless you provide "public b(int value)" constructor)        
    // but can call base class constructor if required
    public b(): base(0) {...}
  } 

答案 3 :(得分:0)

构造函数不能inheritclass可以。

上面的代码调用的是类abc的另一个构造函数,它接受一个新的pqr对象。

此外,它还用于重用带有pqr对象的构造函数中的代码。