方法内申明的局部变量为什么不需要实例化(C#为例)

一个类中申明的实例成员即使是在该类的内部被自己申明的方法调用也是需要先实例化才可以调用的。
那为什么在一个方法内部申明的局部实例变量却不需要先实例在调用呢。这好像有点违反规则。尽管问题看上去显而易见,但是仔细想想,谁能给出一个相对合理的解释呢(要有说服力,不要就事论事)
对 爱仙剑的小子的补充
void print()
{
int i = 10;
cout<<i;
}
是绝对可以的,实例成员是指申明是不带static的,静态成员是指申明时带static的。很明显,上面那个实例成员i,是不必通过包含它的类的实例对象来调用的。
突然发现还有一个例子:
class Test
{
int x;
static y;
void F()
{
x = 1; //实例方法内可以直接引用实例成员,而不必通过(new Test()).x
y = 1; //实例方法内也可以直接引用静态成员
}
}

你把引用类型的实例化和值类型的初始化混在一起。C#数据类型分两种,值类型和引用类型,你说的变量是值类型。引用类型需要实例化以便引用它的对象,值类型(不管是不是局部变量)需要初始化才能使用。
每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。要么用new初始化化,相当于调用它的默认构造函数赋值为默认值,要么直接对他赋值初始化,例如常见的数组初始化。用new初始化常常被误认为是实例化,其实不是,值类型的变量直接包含值,所谓使用变量是将一个值类型变量赋给另一个值类型变量,复制包含的值。如果值变量不初始化,如何复制包含的值?这与引用类型变量的赋值不同,引用类型变量的赋值只复制对象的引用,而不复制对象本身。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-09
为什么在一个方法内部申明的局部实例变量却不需要先实例在调用呢
你确定能正常运行嘛?
最简单的你写一个print函数
void print()
{
int i;
cout<<i;
}
这样不会出错嘛?这是要出错的啊
相似回答