C#,使用++运算符对通过属性获取的值(get)

时间:2015-11-10 23:34:54

标签: c# properties

在C#中,我们定义一个属性如下:

// m_age is a private int in the class Employee
public int Age
{
    get {return m_age;}
    set {m_age = value;}
}

现在,当我做

static void Main()
{
    Employee e = new Employee(age: 28); // Create new Employee
    System.Console.WriteLine("Age: {0}", e.Age); // Prints 28

    // Now increase age by 1
    ++e.Age;

    System.Console.WriteLine("Age: {0}", e.Age); // Prints 29
}

为什么

++e.Age;

工作?我做了一些搜索,发现Properties - by value or by reference?

这篇文章有一个答案:

  

从技术上讲,它始终是有价值的,但你必须了解传递的内容。由于它是引用类型,因此您将传回引用(但按值)。

     

希望这是有道理的。您总是按值传递结果,但如果类型是引用,则您将按值传递引用,这意味着您可以更改对象,但不能更改引用的对象。

(我对值类型和引用类型有很好的理解,因此我的困惑)。

现在,如果确实

e.Age

返回m_age的副本(int是值类型),我们不会将增量++应用于副本吗?

或......以下是真的吗?

++e.Age;

完全相同/被翻译为

e.Age = e.Age + 1

只有那个

++e.Age;

返回一个值(e.Age增加后的值),而

e.Age = e.Age + 1

是一个赋值,不返回值(例如C ++会这样做)。

1 个答案:

答案 0 :(得分:7)

++运算符(除非重新定义)将get,再次修改和set值。

检查这个的一个好方法是定义get和set并在调试模式下完成。对于递增和递减运算符,此行为也是detailed in the C# specification