在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 ++会这样做)。
答案 0 :(得分:7)
++
运算符(除非重新定义)将get
,再次修改和set
值。
检查这个的一个好方法是定义get和set并在调试模式下完成。对于递增和递减运算符,此行为也是detailed in the C# specification。