如果我有一个 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 可能根本不会对相同的数据进行操作。但是,即使是这种情况,它们仍然是方法,每次您使用它们时都会发生这种情况是方法调用。