C#变量初始化与赋值

时间:2010-09-23 15:00:28

标签: c# .net variables syntax terminology

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

  

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

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

好吧,我一直认为(并且在网上也是如此),关于首先将值赋值给变量的初始化。我认为int X=5只是作为声明的一部分进行分配。

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

4 个答案:

答案 0 :(得分:5)

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

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

int x=5;

是声明和初始化,实际上只是

的简便缩写
int x;
x=5;

答案 1 :(得分:3)

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

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

fields之外,它们是在类或结构中声明的变量。在为该对象实例调用构造函数之前,它们被初始化为default values。因此,即使您(第一次)将某些内容分配给构造函数中的字段并且该字段未在声明处初始化,严格来说也是分配,而不是初始化。在没有详细说明的情况下,我想许多程序员确实将构造函数中的字段的第一次赋值视为初始化,并且可以在彼此的对话中使用它。可能这种使用/习惯源于使用非托管语言,如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
    }
}

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

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

答案 2 :(得分:0)

通常,初始化时,如果第一次分配变量,无论是由程序显式还是由编译器/运行时隐式地指定。但是,初始化机制对于理解尤其是在使用类时非常重要。考虑单步执行下面的简单示例(在某处创建'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;
    }
}

答案 3 :(得分:0)

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

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