C#变量初始化与赋值

在我发现的一本书中(翻译):

初始化意味着在声明时分配变量的值。 int X=5称为初始化命令。

编辑:它只是说,只有在声明时分配值时才使用术语初始化。 如果你以后这样做,那就是它的正当分配(根据它 – 我不这么认为,这就是我要问的原因)。 这是真的吗?

好吧,我一直认为(并且根据网上的其他人的说法)关于首先将值赋值给变量的初始化。 我认为int X=5只是赋值作为声明的一部分。

我试图在MSDN上搜索没有运气。 感谢您提供任何信息。

如果您要问的是术语(*从您的问题中并不是很清楚),那么变量的“初始化”实际上是第一次为其赋值。 这个术语来自于你给变量它的“初始”值。

这应该(显然)在第一次使用之前发生。

 int x=5; 

是一个声明和一个初始化,实际上只是方便的简写

 int x; x=5; 

通常,变量的初始化是声明后的第一个赋值,因为变量不会自动初始化。 后续作业只是作业。

 void foo() { int i;//not initialized. } 

除了字段 ,它是在类或结构中声明的变量。 在为该对象实例调用构造函数之前,这些值被初始化为其默认值 。 因此,即使您(第一次)将某些内容分配给构造函数中的某个字段并且该字段未在声明中初始化,严格来说也是分配,而不是初始化。 在没有详细说明的情况下,我想许多程序员确实将构造函数中的字段的第一次赋值视为初始化,并且可以在彼此的对话中使用它。 可能这种用法/习惯源于使用非托管语言,如C / C ++,其中变量在首次声明时包含乱码,因此必须用非垃圾值填充它(初始化)。

 class A { int x;//not initialized int y = 1;//initialized here A() { x = 1;//strictly speaking, not initialization, just assignment. y = 2;//was obviously initialized above } } 

对于不编写编译器或语言的程序员来说,能够与其他程序员进行有效通信比了解单词初始化的确切术语更重要。 所以,继续使用它的意思,你周围的每个人都明白。 虽然解释确切的含义是没有错的(但我可能不会因为害怕暴露我的迂腐倾向)。

就个人而言,我会避免使用一个对变量使用术语“初始化命令”的书。

通常,如果第一次分配变量,则初始化,无论是由程序显式指定还是由编译器/运行时隐式指定。 但是,初始化机制对于理解尤其是在使用类时非常重要。 考虑单步执行下面的简单示例(在某处创建’Bar’实例),看看编译器如何处理初始化过程。 您会注意到这些字段是在初始化时声明的,并且在构造函数有机会设置之前都会“初始化”。

 public class barBaseBase { protected int x = 5; public barBaseBase() { x = 4; } } public class barBase : barBaseBase { protected int y = 4; public barBase() { x = 3; y = 2; } } public class Bar : barBase { protected int z = 3; public Bar() { x = 2; y = 1; z = 0; } } 

请注意,初始化字段会导致C#编译器为每个构造函数发出初始化IL指令。 因此,如果你有多个构造函数,你将重复初始化IL – 即不必要的代码膨胀。

最好初始化默认构造函数中的变量,让其他构造函数调用它。