[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)
{}
}
我理解宣布上课。但是,超越构造函数的目标是什么?它们甚至与原件具有相同的范围。
答案 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
的声明可能是空的,结果相同,但我选择是明确的 - 如果存在任何其他构造函数,那么显式确实很重要。