Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这是什么意思?(关于类和实例)_C#_Class_Instance - Fatal编程技术网

C# 这是什么意思?(关于类和实例)

C# 这是什么意思?(关于类和实例),c#,class,instance,C#,Class,Instance,我知道如果我想创建实例,我应该编写如下代码: using System; class Program { static void Main() { haha haha1; } } class haha { int a; int b; public haha(int a, int b) { this.a = a; this.b = b; } } 但是当我写的时候 haha hah

我知道如果我想创建实例,我应该编写如下代码:

using System;

class Program
{
    static void Main()
    {
        haha haha1;
    }
}

class haha
{
    int a;
    int b;

    public haha(int a, int b)
    {
        this.a = a;
        this.b = b;
    }
}
但是当我写的时候

haha haha1 = new haha(1,2);
没有编译错误


什么是
哈哈哈1平均值?这不是错误的代码吗?

这不是错误的代码。它是一个变量声明

haha haha1;
只需声明一个名为haha1的变量,该变量的类型为haha。但是,此变量未指定值

使用新关键字实例化对象时:

haha haha1;

然后,该变量引用创建的对象,它不是错误代码。它是一个变量声明

haha haha1;
只需声明一个名为haha1的变量,该变量的类型为haha。但是,此变量未指定值

使用新关键字实例化对象时:

haha haha1;

然后,变量引用创建的对象,该对象取决于编程语言,但大多数编程语言选择两个选项之一:

1) 隐式初始化(C++)

haha haha1;
haha haha1;
2) 空初始化(C#)

haha haha1;
haha haha1;
无论发生什么,行为的结果称为“默认值”或“默认初始值设定项”。有关详细信息,请参阅语言文档


一些注释:C和C++允许变量不初始化,因此在分配给它们之前它们没有确定的值。C++非指针不能为空,所以它们总是用某种东西初始化(但所有其他的,包括指针,都遵循C规则)。

< P>这取决于编程语言,但是大多数编程语言选择两种选项之一:

1) 隐式初始化(C++)

haha haha1;
haha haha1;
2) 空初始化(C#)

haha haha1;
haha haha1;
无论发生什么,行为的结果称为“默认值”或“默认初始值设定项”。有关详细信息,请参阅语言文档


一些注释:C和C++允许变量不初始化,因此在分配给它们之前它们没有确定的值。C++非指针不能为空,所以它们总是用某种东西初始化(但其他的东西,包括指针,遵循C规则)。< /P>:如果你声明一个对象变量,并且不希望在那时创建对象,我建议你把它赋值为代码> null < /C> >,例如:代码>哈哈哈HAH1= null;代码>。这样,您不仅*强调(对人类读者)您正在做的事情,而且还确保变量的值最初不会包含“垃圾”。我喜欢做同样的事情,只要有意义,也经常使用指针变量。@MikeRobinson在C#中引用未初始化(局部)变量是一个编译错误,因此无法读取垃圾(类字段在默认情况下是初始化的,所以它们仍然不能是垃圾)。通过始终初始化变量(尤其是null),可以掩盖代码假定值已正确初始化的问题。保持它未初始化将允许编译器检测这些问题。啊,是的。他们不让德尔福知道!你的观点很好,我已经适时地投了赞成票。我给出了我以前的建议。另外:如果您声明了一个对象变量,并且不希望在那个时候创建该对象,我建议您应该给它赋值

null
,例如
haha haha1=null;'。这样,您不仅*强调(对人类读者)您正在做的事情,而且还确保变量的值最初不会包含“垃圾”。我喜欢做同样的事情,只要有意义,也经常使用指针变量。@MikeRobinson在C#中引用未初始化(局部)变量是一个编译错误,因此无法读取垃圾(类字段在默认情况下是初始化的,所以它们仍然不能是垃圾)。通过始终初始化变量(尤其是null),可以掩盖代码假定值已正确初始化的问题。保持它未初始化将允许编译器检测这些问题。啊,是的。他们不让德尔福知道!你的观点很好,我已经适时地投了赞成票。我同意我以前的建议。
haha-hahaa1
仅当
haha1
是类中的字段时,才等效于空赋值。局部变量可以取消初始化,这与将它们初始化为
null
不同,因为编译器不允许您读取未明确赋值的局部变量。@Kyle您指的是哪种语言?@andlabs好吧,问题被标记为C#,所以我指的是C#。@Kyle啊,我看到有人在我发布答案后添加了标签。我不知道关于C#;很高兴知道<如果
haha1
是类中的字段,则code>hahaa1
仅相当于空赋值。局部变量可以取消初始化,这与将它们初始化为
null
不同,因为编译器不允许您读取未明确赋值的局部变量。@Kyle您指的是哪种语言?@andlabs好吧,问题被标记为C#,所以我指的是C#。@Kyle啊,我看到有人在我发布答案后添加了标签。我不知道关于C#;很高兴知道!