C#使用带分号的基础构造函数

时间:2017-02-07 12:23:54

标签: c# syntax constructor semantics

在C#中创建构造函数时,引用继承类的超级构造函数,为什么我需要使用大括号,而不是选择用分号终止语句?

我想到了这个问题,因为我目前有一个抽象类,它继承了很容易返回执行命令的结果。

例如:

 abstract class CommandResult<T> {
    protected CommandResult() { }

    protected CommandResult(string msg) : this() {
        Message = msg;
    }

    protected CommandResult(string msg, T result) : this(msg) {
        Result = result;
    }

    protected CommandResult(T result) : this() {
        Result = result;
    }
 }

将是我的抽象类。 在引用它的类中,它们目前看起来如下所示:

 public class CommandIntResult: CommandResult<int> {

    public CommandIntResult() { }

    public CommandIntResult(string msg) : base(msg) { }

    public CommandIntResult(string msg, int result) : base(msg, result) { }

    public CommandIntResult(int result) : base(result) { }

}

构造函数体中没有逻辑。 需要括号的原因是什么,而不是选择以分号结束,如下所示?

public CommandIntResult(string msg, int result): base(msg, result);

1 个答案:

答案 0 :(得分:3)

在方法声明的上下文中,;并不意味着“这是一个空方法”。

abstract方法上,它表示“没有方法体”。

extern方法上,这意味着实际代码位于其他位置。

对于属性getter和setter,它表示“自动生成此方法的代码”。

如果你想编写一个方法体,那么已经有了一种编写方法,只有一个字符更长 - {}