这个冒号在构造函数定义中被称为什么?

时间:2015-04-02 21:55:15

标签: c# terminology

在C#中定义构造函数时,可以使用冒号(如this example中所示):

 public class Custom : OtherClass {
      public Custom(string s) : base(s) { }
 }

这个冒号叫什么? (如果不知道它叫什么,就很难读懂它。) < / SUP>

请注意,我在构造函数定义中询问冒号,而不是在类定义中显示继承的冒号。

1 个答案:

答案 0 :(得分:4)

这不是一个方法定义,它是一个构造函数定义;冒号用于指定必须在子类的构造函数之前调用的超类构造函数调用。

在Java中,使用了super关键字,但它必须是子类构造函数中的第一个操作,而C#使用的语法更接近C ++的初始化列表。

如果是一个子类&#39;超&#39;构造函数没有任何参数,因此不需要显式调用父构造函数,只有在需要参数时或者如果要调用特定的重载构造函数时,才必须使用此语法。

爪哇:

public class Derived extends Parent {
    public Derived(String x) {
        super(x);
    }
}

C#:

public class Derived : Parent {
    public Derived(String x) : base(x) {
    }
}

更新

C#语言规范5.0 - https://msdn.microsoft.com/en-us/library/ms228593.aspx?f=255&MSPPError=-2147217396在第10.11.1节&#34;构造函数初始化程序&#34;

中有解释
  

所有实例构造函数(类Object除外)都隐式包含在构造函数体之前的另一个实例构造函数的调用。隐式调用的构造函数由 constructor-initializer 确定:

这个语法的官方技术术语......

: base(x, y, z) 

...是&#34; constructor-initializer&#34;但是规范没有专门调用冒号语法并给它自己的名字。本作者假定规范并不涉及这些无关紧要的事情。