为什么C#在类定义后不需要分号?

时间:2011-05-17 23:41:44

标签: c#

在C ++中,需要使用分号来结束类定义。我想知道为什么c#不需要它?

2 个答案:

答案 0 :(得分:13)

C ++语言允许在类声明中声明变量。类似于:

class Mumble {
  // etc...
} globalMumble;

分号是必需的语法,让编译器知道是否也声明了变量。此语法是非常难以解释编译错误消息的慢性来源。最糟糕的是:

mumble.h:

class Mumble {
  // etc...
}      // <== note: semi-colon forgotten

mumble.cpp:

#include "stdafx.h"
#include "mumble.h"

int main() {
    Mumble* obj = new Mumble;
}

这会产生以下错误信息:

main.cpp(8): error C2628: 'Mumble' followed by 'int' is illegal (did you forget a ';'?)
main.cpp(9): error C3874: return type of 'wmain' should be 'int' instead of 'Mumble'
main.cpp(10): error C2440: 'return' : cannot convert from 'int' to 'Mumble'

请注意,所有错误消息都是指.cpp文件,而不是包含错误的.h文件。绝望的程序员在此时已经失去了几个小时,还有一大堆头发。

C#语言由高技能的C ++程序员设计。谁开始设计一种避免这种现实语法问题的语言。这在C#语法的许多地方都很明显。简而言之:C#不允许这种C ++语法,不需要使用分号来帮助编译器。

答案 1 :(得分:3)

C#中的分号分隔语句

因为类不是语句(并且大括号已经结束了类定义),所以分号将是多余的。