<分区>
首先介绍一下:
这段代码:
class C
{
int i = 5;
byte[] s = new byte[i];
}
编译失败,出现以下错误:
A field initializer cannot reference the nonstatic field, method, or property `C.i'
Resharper 说了类似的话:无法在静态上下文中访问非静态字段 i
。
这与 C# spec says 内联-- 字段初始值设定项无法访问当前正在创建的实例 (this
),或者通过扩展,访问任何实例字段:
A variable initializer for an instance field cannot reference the instance being created. Thus, it is a compile-time error to reference this in a variable initializer, as it is a compile-time error for a variable initializer to reference any instance member through a simple-name.
然而,这在 Java 中工作得很好:
class C {
int i = 5;
byte s[] = new byte[i]; //no errors here
}
还在我身边吗?好的,这是问题。错误,问题。
在一个假设的世界中,这在 C# 中是有效的,我想知道:它甚至可能吗?如果是这样,将添加到表格中的优点和缺点是什么? 此外,由于 Java 确实支持它,同样的优点/缺点是否适用 对于 Java?还是两种语言的类型初始值设定项的工作方式存在根本差异?