当你申明变量的时候就会为它在内存中分配内存空间,照我个人理解就是你说的C#有保护机制,如果使用未赋值的变量就会导致程序出错,所以在编译的时候就会出现语法错误
那是因为它的语法规则规定了 这样写是错的。为什么是错的呢,因为它没有为变量分配空间,在使用这个变量的过程中可能会出现异常,所以.平台提示你.你是错的
你媳妇还没有怀孕的时候,你就可以先给孩子起名字,但你会去用这个名字买房吗
对于值类型的话,没有这个限制吧,没有初始化的话,自动默认值;
对于引用类型的话,定义的时候就是一个引用,还没有分配内存空间,所以不能使用,至少也得=null才行,微软也是为你好
是因为C#编译器的C#保护机制。
定义变量时内存已经分配了,只不过没有初始化,C#编译器强制要求变量在使用前都必须初始化。
C#是有保护机制,在使用变量的时候必须赋值。你如果想使用未赋值的变量的话,那么不能在一个类中使用。给你两个简单的类:
public class Class1
{
public string s;
public int a;
}
public class Test
{
public static void Main()
{
Class1 c1 = new Class1();
int inta = c1.a;
string str1 = c1.s;
Console.WriteLine(inta);
Console.WriteLine(str1);
Console.ReadLine();
}
}
这是个很好的问题,比较细致,值得好好记忆下。
当我们在声明一个变量的时候,此时会进行内存分配(比如int i;此时会在堆栈上分配4个字节),也就是在进行变量声明时会进行内存的分配,以保存该类型对应的值。至于我们声明一个变量后不进行赋值便使用,此时是编译器会报错,错误提示是 使用了一个未赋值的变量.在.NET中有一个概念应该是大家都很熟悉的,那就是类型安全。何为类型安全,这个提问应该说是个最好的例证。如果有注意,在.NET编译器中,对未赋值的变量进行使用的时候,编译器会提示这是个错误,而在其他语言编译器中对未赋值变量的使用提示的是警告。
...其实说了这么多,个人觉得还是不够权威性。故索性直接查阅《C#语言规范》,在规范中一句话道破天机"一个局部变量通常通过指定的类型名称和说明符来定义,它指定了变量名称和一个任意的初始值<A local variable is defined by specifying a type name and a declarator that specifies the variable name and an optional initial value>(ECMA-334 C# 8.3 Variables and parameters)".看完这句话,这个问题我觉得也不用在质疑了...
另外正对石云 所写实例,补充说一点:C#中使用两种方式保证类型安全:
一、变量是类或者结构中的字段,如果没有进行显示赋值,在默认状态下创建相应变量时,其值为对应类型默认值。
二、方法的局部变量必须在代码中显示初始化,之后才可以在语句中进行使用。