Sel*_*don 83 c# syntax language-design
为什么C#允许代码块前没有声明(例如if
,else
,for
,while
)?
void Main()
{
{ // any sense in this?
Console.Write("foo");
}
}
Run Code Online (Sandbox Code Playgroud)
Joã*_*elo 141
所述{ ... }
具有至少引入局部变量新范围的副作用.
我倾向于在switch
语句中使用它们为每种情况提供不同的范围,这样我就可以在最近的使用位置定义具有相同名称的局部变量,并且还表示它们仅在案例级别有效.
Bol*_*ock 87
在你给出的上下文中,没有任何意义.将一个常量字符串写入控制台将在程序流程中的任何位置以相同的方式工作.1
相反,您通常使用它们来限制某些局部变量的范围.这里和这里进一步详细说明.看看JoãoAngelo的回答和Chris Wallis的简短例子.我相信这同样适用于其他一些具有C风格语法的语言,但并不是说它们与这个问题有关.
1 当然,除非你决定尝试搞笑并创建自己的Console
类,否则使用一种Write()
完全出乎意料的方法.
Chr*_*lis 55
它不是C#的一个特性,而是使用大括号定义范围的许多C语法语言的逻辑副作用.
在您的示例中,大括号根本没有效果,但在以下代码中,它们定义变量的范围,从而定义可见性:
这是允许的,因为我超出了第一个块中的范围,并在下一个块中再次定义:
{
{
int i = 0;
}
{
int i = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
这是不允许的,因为我已经超出范围并且在外部范围中不再可见:
{
{
int i = 0;
}
i = 1;
}
Run Code Online (Sandbox Code Playgroud)
等等等等.
RBa*_*rda 17
我认为这{}
是一个可以包含多个陈述的陈述.
考虑一个if语句,它存在于布尔表达式后面跟一个语句.这可行:
if (true) Console.Write("FooBar");
Run Code Online (Sandbox Code Playgroud)
这也可以:
if (true)
{
Console.Write("Foo");
Console.Write("Bar");
}
Run Code Online (Sandbox Code Playgroud)
如果我没有弄错,这被称为块语句.
既然{}
可以包含其他语句,它也可以包含其他语句{}
.变量的范围由它的父{}
(块语句)定义.
我试图做的一点是,这{}
只是一个声明,所以它不需要if或者其他......
Mas*_*imo 11
C语法语言中的一般规则是"任何之间的任何东西{ }
应该被视为单个语句,它可以在单个语句可以的任何地方":
if
.for
,while
或do
.对于所有意图和目的,它的语法语法包括:
<statement> :== <definition of valid statement> | "{" <statement-list> "}"
<statement-list> :== <statement> | <statement-list> <statement>
Run Code Online (Sandbox Code Playgroud)
也就是说,"语句可以由(各种事物)或左括号组成,后跟语句列表(可以包括一个或多个语句),后跟一个闭括号".IE"一个{ }
块可以在任何地方替换任何语句".包括在代码中间.
不允许{ }
单个语句可以在任何地方使用块实际上会使语言定义更复杂.
归档时间: |
|
查看次数: |
7197 次 |
最近记录: |