在C#中,我们定义一个属性如下:
// m_age is a private int in the class Employee
public int Age
{
get {return m_age;}
set {m_age = value;}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我这样做
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
}
Run Code Online (Sandbox Code Playgroud)
为什么呢
++e.Age;
Run Code Online (Sandbox Code Playgroud)
工作?我做了一些搜索并找到了属性 - 按价值或参考?
这篇文章有一个答案:
从技术上讲,它总是靠价值,但你必须了解传递的是什么.因为它是一个引用类型,所以你传回一个引用(但是按值).
希望有道理.您总是按值传递结果,但如果类型是引用,则您将按值传递引用,这意味着您可以更改对象,但不能更改它引用的对象.
(我对值类型和引用类型有很好的理解,因此我的困惑).
现在,如果确实如此
e.Age
Run Code Online (Sandbox Code Playgroud)
返回m_age 的副本(int是值类型),我们不会将增量++应用于副本吗?
或者......以下是真的吗?
++e.Age;
Run Code Online (Sandbox Code Playgroud)
完全相同/被翻译成
e.Age = e.Age + 1
Run Code Online (Sandbox Code Playgroud)
只有这样
++e.Age;
Run Code Online (Sandbox Code Playgroud)
返回一个值(e.Age增加后的值),而
e.Age = e.Age + 1
Run Code Online (Sandbox Code Playgroud)
是一个赋值,不返回一个值(例如C++会这样做).
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |