Joh*_*ski 24 c# int default initialization default-value
这有效:
class MyClass
{
int a;
public MyClass()
{
int b = a;
}
}
Run Code Online (Sandbox Code Playgroud)
但这会产生编译错误("使用未分配的局部变量'a'"):
class MyClass
{
public MyClass()
{
int a;
int b = a;
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这是因为在第一个例子中,从技术上讲,编译器不知道没有分配'a'.在后一个例子中,'a'是在本地定义的,因此很容易跟踪.
但为什么后一个例子不起作用?
不要将整数默认为0吗?这是编译器对"最佳实践"强制执行的操作.还是有其他原因吗?
Mar*_*ell 34
在第一个例子中,它是一个字段.Fields自动默认为0/false/null.在第二个例子中,它是一个变量.变量不是默认值,在使用之前必须具有"明确赋值".
本质上,在创建对象(或初始化结构)时,它会将内存归零(或者在非默认结构的情况下,强制您手动初始化所有内容).但是,变量是如此常见(在每种方法中),它不希望总是必须将堆栈归零.它会强制您指示初始值.
Chr*_*isW 11
不要将整数默认为0吗?
当它们是类的数据成员时它们会这样做,但是当它们是局部变量时它们不会这样做:局部变量需要在使用之前显式初始化,因此编译器错误.