我看到了这种奇怪的行为,我想知道是否有合理的解释:
当我(意外地)在函数的局部变量中添加了一个额外的分号时,如:
public void MyMethod ()
{
int a = 1;;
Console.WriteLine(a); //dummy
}
它确实可以编译,但它表明它是多余的。
但当我对字段执行此操作时(也是偶然),我得到了一个错误(编译):
问题
是否有任何理由限制这些领域?
Nb我已经知道了不允许var
带有字段的另一个限制因素。但这里有所不同。
它不是局部变量声明的一部分,它本身就是一个语句,正如Thomas所指出的。
这是有效的:
public void MyMethod ()
{
;;;
int a = 1;
;
Console.WriteLine(a); //dummy
;;
}
分号语句的思想是允许这样的构造:
while(mycondition) ;
允许它进入课堂主体是没有意义的,它没有带来额外的价值。
TLDR;这与变量/字段声明无关
您可能也想看看这个线程:什么时候在C#中使用没有语句的scope?
这有点相似,但并不完全,这将帮助你理解为什么
int a=1;;
是有效的。
<代码> 本身是一条空语句。在类范围中,只允许声明语句。船级社定义见规范5.0,§10.1.6船级社
class-body:
{ class-member-declarations }
例如,不能在单独的语句中初始化字段:
class Foo
{
int x = 2; // this is allowed
x = 5; // this is not
}
因此,您只能声明字段和其他成员,但不能在类主体中使用其他语句。
<代码> 单独是一个语句(空语句),但在类的主体中只允许声明语句;其他类型的语句只能出现在方法体中。
局部变量使用关键字 def 来声明,其只在声明它的地方可见 . 局部变量是 Groovy 语言的一个基本特性. 例子 13.2 . 使用局部变量 def dest = "dest" task copy(type: Copy) { form "source" into dest }
问题内容: 在阅读有关Java的书时,我看到了一个这样编写的示例。我想知道我可以在main方法之外声明变量吗?在main方法外部和内部声明变量之间有什么区别?“静态”在这里的作用是什么?请有人给我解释一下吗?我是Java新手。 最好的祝福。 问题答案: 1)内部与外部: 如果 在 方法 内部 声明对象,则该对象仅在该方法中可见。基本上,如果在其周围放置方括号,则只能从这些方括号内看到/访问它。 如
问题内容: 我正在编写一个小程序,以有序的方式定时显示我的Rubik立方体解。但是Python(3)一直困扰着我关于全局声明之前使用时间的困扰。但是奇怪的是,它在开始时就声明为(是,是列表),然后在函数(他抱怨的地方)中再次声明为,并使用对其进行“全局”处理。这是我的代码,因此您可以根据需要进行分析: 任何帮助将不胜感激,因为我是Python世界的新手:) 问题答案: 全局声明是当你声明是 如果声
问题内容: 所以这很奇怪,我知道代码本身是没有用的,但是我想知道为什么会收到错误: 我正在写一些代码,我已经写了这个: 当时没有考虑可变范围,显然这是没有用的,因为无论如何我都无法使用过去。我没有得到的是为什么我得到了我的错误: 现在,如果我将其修改为: 它将编译正常。我给人的印象是,如果大括号下有1行是可选的……显然,还有其他考虑,或者两者都会编译或失败。 有人可以向我解释一下,还是可以指向一个
问题内容: 我想制作一个可以在整个应用程序中访问的自定义对象的全局数组(AppDelegate,ViewController类,TableViewController类等)。我已经研究了一种解决方法,但没有找到答案。我曾尝试将数组设置为公共范围,但是收到了编译器警告,提示当我尝试在其他文件中访问该数组时,出现错误提示 我将如何使该数组可被应用程序中的所有文件全局访问,我将在哪里实例化该数组? 问题
问题内容: 以下Java代码无法编译。 为什么?在没有先声明的情况下,没有代码路径可导致程序将1分配给该路径。 我想到的范围可能仅限于第一条陈述,但后来我不明白为什么。如果我真的不想不必要地声明以提高性能怎么办?我不喜欢声明后不使用变量。 (您可能想争论一下,我不可以在第二条语句中简单地声明b ,在这种情况下,请想象一下它可能在其他地方处于循环中。) 问题答案: 为什么?如果没有先声明,没有代码路