gpt4 book ai didi

c# - 如果我有一个具有 setter/getter 的Property_1且该 setter/getter 从Property_2获取值,那么Property_1本身是否真正拥有一个值/引用?

转载 作者:行者123 更新时间:2023-12-03 10:25:56 25 4
gpt4 key购买 nike

如果我有一个具有 setter/getter 的属性(Property_1),并且该 setter/getter 从另一个属性(Property_2)获取值,那么Property_1本身是否持有Property_2值的副本?

或者,Property_1根本没有任何东西,只是每次我索要它时都会获得Property_2的值?

现在,让我们说Property_2引用了一个对象而不是一个值。当Property_1从Property_2检索该引用时,Property_1现在是否拥有对该对象的引用?

我需要知道这一点,因为我担心在卸载类之前应将Property_1设置为null,以帮助GC释放内存。

例如,我有一个SecondaryViewModel,并且在其中引用了MainViewModel:

MainViewModel mainViewModel
{
get
{
return (new ViewModelLocator()).MainViewModel;
}
}

mainViewModel是否像这里的信息检索方法那样被简单地使用?

最佳答案

getter和setter都是方法。

对于自动实现的属性,当您调用getter时,将返回背景字段的值。而当您调用 setter 时,则通过 setter 将一个值分配给后备字段。

话虽这么说,每当您要检索基础字段(也称为后备字段)时,都会进行方法调用。

例如,让您拥有以下控制台应用程序:

class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
}

class Program
{
static void Main(string[] args)
{
var customer = new Customer();

customer.FirstName = "Foo";

Console.WriteLine(customer.FirstName);
}
}

如果您尝试查看由编译器生成的IL代码,则会看到以下内容:

enter image description here

更一般地说,正如 Rufus L在下面的评论中指出的那样,getter和setter可能根本不对同一数据进行操作。但是,即使是这种情况,它们仍然是方法,每次使用它们时都会发生方法调用。

关于c# - 如果我有一个具有 setter/getter 的Property_1且该 setter/getter 从Property_2获取值,那么Property_1本身是否真正拥有一个值/引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49863152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com