如果我有一个 Property_1,它有一个 getter 并且 getter 从 Property_2 得到一个值,那么 Property_1 本身是否真的拥有一个 value/reference?
If I have a Property_1 that has a getter & that getter gets a value from Property_2, does Property_1 actually hold a value/reference itself?
如果我有一个 属性 (Property_1),它有一个 getter 并且 getter 从另一个 属性 (Property_2), Property_1 本身是否持有 Property_2 值的副本?
或者也许 Property_1 根本不保存任何东西,每次我请求它时都简单地去获取 Property_2 的值?
现在假设 Property_2 引用了一个对象而不是一个值。当 Property_1 从 Property_2 检索该引用时,Property_1 现在是否有自己对该对象的引用?
我需要知道这一点,因为我担心我应该在卸载 class 之前将 Property_1 设置为 null 以帮助 GC 释放内存。
例如,我有一个 SecondaryViewModel,我在其中引用了我的 MainViewModel:
MainViewModel mainViewModel
{
get
{
return (new ViewModelLocator()).MainViewModel;
}
}
mainViewModel 只是像这里的方法一样被用来获取信息吗?
getter和setter都是方法。
对于自动实现的属性,当您调用 getter 时,返回 支持字段 的值。然而,当您调用 setter 时,您通过 setter 为支持字段分配了一个值。
也就是说,每次您想要检索基础字段(a.k.a。支持字段)时,都会进行 方法调用 。
例如,假设您有以下控制台应用程序:
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 代码,您将看到:
更一般地说,正如 Rufus L 在他下面的评论中指出的那样,getters 和 setters 可能根本不会对相同的数据进行操作。但是,即使是这种情况,它们仍然是方法,每次您使用它们时都会发生这种情况是方法调用。
如果我有一个 属性 (Property_1),它有一个 getter 并且 getter 从另一个 属性 (Property_2), Property_1 本身是否持有 Property_2 值的副本?
或者也许 Property_1 根本不保存任何东西,每次我请求它时都简单地去获取 Property_2 的值?
现在假设 Property_2 引用了一个对象而不是一个值。当 Property_1 从 Property_2 检索该引用时,Property_1 现在是否有自己对该对象的引用?
我需要知道这一点,因为我担心我应该在卸载 class 之前将 Property_1 设置为 null 以帮助 GC 释放内存。
例如,我有一个 SecondaryViewModel,我在其中引用了我的 MainViewModel:
MainViewModel mainViewModel
{
get
{
return (new ViewModelLocator()).MainViewModel;
}
}
mainViewModel 只是像这里的方法一样被用来获取信息吗?
getter和setter都是方法。
对于自动实现的属性,当您调用 getter 时,返回 支持字段 的值。然而,当您调用 setter 时,您通过 setter 为支持字段分配了一个值。
也就是说,每次您想要检索基础字段(a.k.a。支持字段)时,都会进行 方法调用 。
例如,假设您有以下控制台应用程序:
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 代码,您将看到:
更一般地说,正如 Rufus L 在他下面的评论中指出的那样,getters 和 setters 可能根本不会对相同的数据进行操作。但是,即使是这种情况,它们仍然是方法,每次您使用它们时都会发生这种情况是方法调用。