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#;很高兴知道!