为什么要在C#中重新构建构造函数?

时间:2014-08-21 23:19:28

标签: c# class-design

[Serializable]
public class DccFormatterException : Exception
{
    public DccFormatterException()
    {}

    public DccFormatterException(string message): base(message)
    {}

    public DccFormatterException(string message, Exception inner): base(message, inner)
    {}

    protected DccFormatterException(SerializationInfo info, StreamingContext context): base(info, context)
    {}
}

我理解宣布上课。但是,超越构造函数的目标是什么?它们甚至与原件具有相同的范围。

1 个答案:

答案 0 :(得分:4)

构造函数不是“虚拟的”:为声明的构造函数,该类型可用于实例化它。

class A {
    public A () {}
    public A (int x) {}
}
class B : A {
    public B(): base() {} // See <1>
}

var b1 = new B();  // O.K.

var a = new A(42); // O.K.

// Compiler error, as there is no matching constructor in B:
// "'B' does not contain a constructor that takes 1 arguments"
var b2 = new B(42);

通过派生类型公开的任何构造函数都必须“代理”;这是覆盖,并且没有多元化现象。


1 C#确实创建了default constructor; B的声明可能是空的,结果相同,但我选择是明确的 - 如果存在任何其他构造函数,那么显式确实很重要。