将一个对象的值存储到一个新对象中,它们是否共享相同的值

本文关键字:是否 共享 对象 一个 存储 一个对象 新对象 | 更新日期: 2023-09-27 17:50:35

所以在过去的几个月里我一直在自学c#,并决定做一个项目,看看我能用我所学到的东西做些什么。

我的问题是。这个新的Person selectedPerson是存储在新内存中的新对象,还是whoosbuying()方法中返回的Person [i]引用。基本上我问的是,它们是否共享相同的属性,如果我更新一个它会更新另一个它们是不同的对象吗,

//Chose the person whos buying something and save into selectedPerson
Person selectedPerson = new Person();
selectedPerson = selectedPerson.WhosBuying(person);
    public Person WhosBuying(List<Person> person)
    {
        StringBuilder buyer = new StringBuilder();
        buyer.Append("Who's Buying? ");
        //Loop through all persons: (1)person[0].Name (2)person[1].Name
        int i = 1;
        foreach (var p in person)
        {
            buyer.Append("(" + (i) + ")" + p.Name + " ");
            i++;
        }
        Console.WriteLine(buyer);
        string buying = Console.ReadLine();
        //Store the person buying into selectedPerson 
        //by returning the person selected by user input
        for (int x = 1; x < person.Count + 1; x++)
        {
            if (int.Parse(buying) == x)
                return person[x - 1];
        }
        return null;
    }

将一个对象的值存储到一个新对象中,它们是否共享相同的值

我会给你一个大概的答案(但很长),因为这个问题可以有不同的答案。

我将从定义几个东西开始(不是因为这些定义是正确的):
值:表达式返回的值,或存储在变量中的值。
数据:该表达式/变量的实际数据(如:字符串的文本等)。

. net中有两种类型的表达式/变量:值类型和引用类型。

值类型:值类型的表达式/变量的值总是数据本身。当你将它存储在一个变量中时,它是复制到该变量的数据——当你将它作为一个参数发送给一个方法时,该数据被复制到该方法的参数中。

引用类型:引用类型的表达式/变量的值始终是对存储在另一个地方的数据的引用(如果你知道它是什么的话,就是指针)。当你把它存储在变量中时,它的引用被复制到那个变量中——所以它们都引用了相同的数据。当你将is作为一个参数发送给一个方法时,该引用被复制到该方法的形参中,因此该方法获得对相同数据的引用。

现在,所有的基本类型(除了object, string和数组),每个enum,以及您定义为struct的每个类型都是值类型。
objectstring、每个数组、委托、每个匿名类型以及定义为class的每个类型都是引用类型——引用类型的数据(几乎)总是用new操作符创建的。

因为你没有给Person指定定义,所以你的答案不能被明确地回答。但是由于您将遇到的大多数类型都是引用类型,因此它最有可能是引用类型(这意味着WhoIsBuying返回对Person实际数据的引用)。

首先,主过程中的"selectedPerson"是一个空白的"new person",一个指向新对象的变量。

在"whoosbuying"方法完成后,变量"selectedPerson"指向该方法返回的任何值。它可以是空值,也可以是从传递给方法的列表中挖出的另一个人(即"p")。

我同意这个评论,这不是一个很好的做法,有这个方法是一个实例方法;它的功能作为静态方法会更有意义。它会像你拥有的那样工作,但是你正在无缘无故地创建和销毁一个额外的对象。