我有以下课程
public class Car
{
public int Id {get;set;}
public string Name {get;set;}
public bool Enabled {get;set;}
public Car()
{
this.Enabled = false;
}
}
在我的代码中,我可以像下面一样创建对象并设置一些属性。
Car oCar = new Car();
oCar.Id = 1;
oCar.Name = "FastCar";
然后我有一个单独的功能,如下面的
public static Car MyCarTest()
{
//do some logic....
Car oCar = new Car();
oCar.Id = 1;
oCar.Name = "Very FastCar";
oCar.Enabled = true;
return oCar;
}
如果我调用与下面相同的代码,后跟函数;
Car oCar = new Car();
oCar.Id = 1;
oCar.Name = "FastCar";
oCar = MyCarTest();
此时调用该函数它将创建一个Car类型的新对象,并将名称指定为'Very FastCar'并将Enabled设置为true;函数返回一个新的Car(),该Car()被分配给创建的初始Car对象。
我的问题是,创建对象的正确方法是什么,设置一些属性值,然后在代码中,条件检查意味着设置的原始对象和属性值将被新的覆盖像对象的实例;
Car oCar = new Car();
oCar.Id = 1;
oCar.Name = "FastCar";
Car oCar1 = new Car();
oCar.Id = 1;
oCar.Name = "Very FastCar";
oCar.Enabled = true;
oCar = oCar1
这是首选方式吗?
答案 0 :(得分:3)
在示例中,您实际上正在更改最初创建的汽车:
Car oCar = new Car();
oCar.Id = 1;
oCar.Name = "FastCar";
致电时:
oCar = MyCarTest();
使原始创作没有意义。如果您想构建一个返回默认对象的方法,那么就这样做:
var oCar = MyCarTest();
答案 1 :(得分:1)
迈克尔指出,您对MyCarTest的调用确实会覆盖您的oCar变量。那说,你在这里有什么
public static Car MyCarTest()
{
//do some logic....
Car oCar = new Car();
oCar.Id = 1;
oCar.Name = "Very FastCar";
oCar.Enabled = true;
return oCar;
}
通常被称为 工厂功能。如果您需要一次又一次地创建具有相同基本属性的对象,这绝对是一种常见的方法。
答案 2 :(得分:0)
除了:
Car oCar = new Car();
oCar.Id = 1;
oCar.Name = "FastCar";
你也可以这样做:
Car oCar = new Car
{
Id = 1,
Name = "FastCar"
};
无论一种方式还是另一种方式是“正常”的做事方式都是一个有争议的问题。有些人可能更喜欢单向另一种方式,但两者都有效。