以下是我所谈论的一个例子。
5400_filenameconstant_$date.csv
现在想象一下其他文件,你做
class Car()
{
int speed = 50;
}
与
有什么不同Car truck;
我已经使用C#一年多了,但仍然没有得到这个。它是一种开关型的东西。
答案 0 :(得分:2)
Car truck;
不会做任何事情。你用这一行代码说的就是你最终可能有或没有Car
类型的对象,你要将它称为truck
。
Car truck = new Car();
声明您要引用名为Car
的{{1}}(就像之前一样),但是也给出了命名为您正在实例化的实际truck
对象。
继续用一个(有些缺陷的)概念来描述汽车:Car
是一个停车位,Car truck;
是你刚建造一辆新车的停车位。
答案 1 :(得分:1)
首先我要说的是class
或struct
是如何解决这一问题的,但是现在我会忽略struct
来简化事情:
现在想象一下在其他文件中,你做了
Car truck;
这会创建一个可能包含Car
实例的变量(或某些情况下的字段),但它不会创建这样的实例。请注意,如果它实际上是一个字段(因为它在class
定义中而不在方法中),那么它将获得默认值null
。如果它是局部变量,则尝试访问它是编译器错误。
这不是Car
的实例,并且尝试将其视为这样会导致发生错误,除非它是一个字段并且您正在调用一个接受null的方法。
与中国有何不同
Car truck = new car();
通过将= new Car();
放在;
之前,您告诉语言使用默认构造函数(即()
构造函数的术语)为您提供实例。这会导致创建类的新实例,并调用您提供的构造函数来初始化该新实例。
请注意,在这种情况下,您有一个有效的Car
,它可以按照您的预期工作,而前一个则没有。{/ p>
简而言之,如果你想让一个地方持有Car
使用第一个定义,如果你真的想要一辆车,请使用第二个。
现在我要扩展struct
,重要的是要记住,但它们并不像课程那么普遍,所以你可以专注于上述。
现在想象一下在其他文件中,你做了
StructCar truck;
这有什么不同于StructCar truck = new StructCar();
现在它们是相同的,它们都创建一个变量或字段,并调用StructCar
的默认构造函数。这将依次将每个字段设置为其默认值(在任何struct
上调用默认构造函数并将class
设置为null
)。这是一个完全有效的StructCar
,但要小心,因为每次你把它交给某人(通过调用一个方法并将其作为参数传递),他们将得到一份副本,而不是原件。另请注意,在StructCar
的定义中,您无法定义默认构造函数,它也会执行我在此处描述的内容。