C# 如何防止通过更改另一个对象来更改对象?

C# 如何防止通过更改另一个对象来更改对象?,c#,.net,C#,.net,我知道这两个对象指向同一个引用,但我不想这样,所以我对如何防止一个对象更改另一个对象有点困惑。我是否需要声明一个band new Car对象,例如Car car2=new Car()?当我这样做的时候,重弹者告诉我这是不必要的。这是我的密码: void Main() { Car car = new Car { Color = "Blue"}; Console.WriteLine(car.Color); //Do I need Car car2 = new Car();

我知道这两个对象指向同一个引用,但我不想这样,所以我对如何防止一个对象更改另一个对象有点困惑。我是否需要声明一个band new Car对象,例如
Car car2=new Car()?当我这样做的时候,重弹者告诉我这是不必要的。这是我的密码:

void Main()
{
    Car car = new Car { Color = "Blue"};

    Console.WriteLine(car.Color);

    //Do I need Car car2 = new Car();
    //car2 = car; //Confused.

    Car car2 = car;

    Console.WriteLine(car2.Color);

    car = Format(car);

    Console.WriteLine(car.Color);
    Console.WriteLine(car2.Color); //How can I prevent car2 from changing color?
}

// Define other methods and classes here
public class Car
{
    public string Color {get;set;}
}

public static Car Format(Car car)
{
    car.Color = "Red";

    return car;
}

 var car2= new Car();
 car2 = car;

 car = Format(car); //This changes car and car2
当我这样做的时候,重弹者告诉我这是不必要的

那么在这种情况下,Resharper就错了。但这取决于你的确切密码

当您希望car1和car2是不同的颜色时,它们应该是不同的实例。这确实需要
car2=新车()

Car是一个类,是一个参考类型。
在您发布的代码中只有一个实例,因此只能有一种颜色

请注意,出于同样的原因,格式化方法不需要返回任何内容,以下操作将完全相同:

public static void Format(Car car)
{
    car.Color = "Red";
}
当我这样做的时候,重弹者告诉我这是不必要的

那么在这种情况下,Resharper就错了。但这取决于你的确切密码

当您希望car1和car2是不同的颜色时,它们应该是不同的实例。这确实需要
car2=新车()

Car是一个类,是一个参考类型。
在您发布的代码中只有一个实例,因此只能有一种颜色

请注意,出于同样的原因,格式化方法不需要返回任何内容,以下操作将完全相同:

public static void Format(Car car)
{
    car.Color = "Red";
}
当我这样做的时候,重弹者告诉我这是不必要的

那么在这种情况下,Resharper就错了。但这取决于你的确切密码

当您希望car1和car2是不同的颜色时,它们应该是不同的实例。这确实需要
car2=新车()

Car是一个类,是一个参考类型。
在您发布的代码中只有一个实例,因此只能有一种颜色

请注意,出于同样的原因,格式化方法不需要返回任何内容,以下操作将完全相同:

public static void Format(Car car)
{
    car.Color = "Red";
}
当我这样做的时候,重弹者告诉我这是不必要的

那么在这种情况下,Resharper就错了。但这取决于你的确切密码

当您希望car1和car2是不同的颜色时,它们应该是不同的实例。这确实需要
car2=新车()

Car是一个类,是一个参考类型。
在您发布的代码中只有一个实例,因此只能有一种颜色

请注意,出于同样的原因,格式化方法不需要返回任何内容,以下操作将完全相同:

public static void Format(Car car)
{
    car.Color = "Red";
}

你可以把汽车做成一个结构

public struct Car
{
    public string Color { get; set; }
}

或者使Car
ICloneable
或复制对象的十几种方法中的任何一种,这样您就可以轻松地拥有另一个实例。我们需要查看显示警告的代码,以便找出问题所在。我没有看到警告。

你可以把汽车做成一个结构

public struct Car
{
    public string Color { get; set; }
}

或者使Car
ICloneable
或复制对象的十几种方法中的任何一种,这样您就可以轻松地拥有另一个实例。我们需要查看显示警告的代码,以便找出问题所在。我没有看到警告。

你可以把汽车做成一个结构

public struct Car
{
    public string Color { get; set; }
}

或者使Car
ICloneable
或复制对象的十几种方法中的任何一种,这样您就可以轻松地拥有另一个实例。我们需要查看显示警告的代码,以便找出问题所在。我没有看到警告。

你可以把汽车做成一个结构

public struct Car
{
    public string Color { get; set; }
}

或者使Car
ICloneable
或复制对象的十几种方法中的任何一种,这样您就可以轻松地拥有另一个实例。我们需要查看显示警告的代码,以便找出问题所在。我没有看到警告。

正如您所提到的,car2和car指的是同一个对象。听起来好像你不想这样,所以你需要创建一个car的副本,并称之为car2

您可以为您的汽车类定义一个复制构造函数:

public Car(Car car)
{
    this.Color = car.Color;
}
然后像这样使用它:

Car car2 = new Car(car);

正如您所提到的,car2和car指的是同一个对象。听起来好像你不想这样,所以你需要创建一个car的副本,并称之为car2

您可以为您的汽车类定义一个复制构造函数:

public Car(Car car)
{
    this.Color = car.Color;
}
然后像这样使用它:

Car car2 = new Car(car);

正如您所提到的,car2和car指的是同一个对象。听起来好像你不想这样,所以你需要创建一个car的副本,并称之为car2

您可以为您的汽车类定义一个复制构造函数:

public Car(Car car)
{
    this.Color = car.Color;
}
然后像这样使用它:

Car car2 = new Car(car);

正如您所提到的,car2和car指的是同一个对象。听起来好像你不想这样,所以你需要创建一个car的副本,并称之为car2

您可以为您的汽车类定义一个复制构造函数:

public Car(Car car)
{
    this.Color = car.Color;
}
然后像这样使用它:

Car car2 = new Car(car);

你混淆了对象和引用
car
是一个引用,
car2
是一个引用,两者都引用同一个对象(源代码中没有名称!)。如果您不想让car2成为car的副本,则需要将其更新。如果您永远不想通过引用传递
car
。你可能想考虑把它变成一个<代码>结构> <代码>,而不是一个<代码>类< /代码>。如果你想要一个新的<代码> CAR2<代码>颜色<代码> Cub>代码>,你应该做<代码> CAR2C=新的汽车{颜色=Car。颜色}<代码>你混淆了对象和引用。code>car
是一个引用,
car2
是一个引用,两者都引用同一个对象(源代码中没有名称!)。如果您不想让car2成为car的副本,则需要将其更新。如果您永远不想通过引用传递
car
。你可能想考虑把它变成一个<代码>结构> <代码>,而不是一个<代码>类< /代码>。如果你想要一个新的<代码> CAR2<代码>颜色<代码> Cub>代码>,你应该做<代码> CAR2C=新的汽车{颜色=Car。颜色}<代码>你混淆了对象和引用。code>car
是一个参考,
car2
是一个参考,两者都引用同一个对象(对于该对象