将一个对象的值存储到一个新对象中,它们是否共享相同的值
本文关键字:是否 共享 对象 一个 存储 一个对象 新对象 | 更新日期: 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
的每个类型都是值类型。object
、string
、每个数组、委托、每个匿名类型以及定义为class
的每个类型都是引用类型——引用类型的数据(几乎)总是用new
操作符创建的。
因为你没有给Person
指定定义,所以你的答案不能被明确地回答。但是由于您将遇到的大多数类型都是引用类型,因此它最有可能是引用类型(这意味着WhoIsBuying
返回对Person
实际数据的引用)。
首先,主过程中的"selectedPerson"是一个空白的"new person",一个指向新对象的变量。
在"whoosbuying"方法完成后,变量"selectedPerson"指向该方法返回的任何值。它可以是空值,也可以是从传递给方法的列表中挖出的另一个人(即"p")。
我同意这个评论,这不是一个很好的做法,有这个方法是一个实例方法;它的功能作为静态方法会更有意义。它会像你拥有的那样工作,但是你正在无缘无故地创建和销毁一个额外的对象。