C#奇数列表行为

这可能有点像一个愚蠢的问题,但我似乎根本找不到任何关于这种行为的信息.

这是代码:

class Cars
{
    public int year = 0;
    public string make = " ";
    public string model = " ";

    public Cars()
    {
    }

    public Cars(int tYear, string tMake, string tModel)
    {
        year = tYear;
        make = tMake;
        model = tModel;
    }

    public string ConvertToString()
    {
        return year.ToString() + make + model;
    }
}

class Program
{
    Cars oneCar = new Cars();
    List<Cars> manyCars = new List<Cars>();

    public void Init()
    {
        manyCars.Add(new Cars(1993, "Nissan", "240SX"));
        manyCars.Add(new Cars(2001, "Isuzu", "Rodeo"));
        manyCars.Add(new Cars(2010, "Ford", "F150"));

        oneCar = manyCars[2];
        oneCar.model = "Pinto";

        for (int i = 0; i < manyCars.Count(); i++)
            Console.WriteLine(manyCars[i].ConvertToString());

        Console.WriteLine(oneCar.ConvertToString());
    }

    static void Main(string[] args)
    {
        Program prg1 = new Program();
        prg1.Init();
    }
}

输出是这样的:

1993Nissan240SX

2001IsuzuRodeo

2010FordPinto

2010FordPinto

为什么第三行读取Pinto而不是F150?它似乎是将oneCar变量设置为指针或其他东西.如何避免这种情况?我认为这就是“新”关键字的成就.

在此先感谢您的帮助.

最佳答案
因为Cars是一个对象,而对象是C#中的引用类型.

当你调用这行代码时:

oneCar = manyCars[2];

您将oneCar指向manyCars [2]的内存位置.它们引用相同的对象.更新oneCar也会更新manyCars [2].

This link对Reference和Value类型有很好的写作.

转载注明原文:C#奇数列表行为 - 代码日志