2015-11-10 58 views
2

在C#中,我們定義一個屬性如下: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 

是一個n賦值並且不返回一個值(就像C++會做的那樣)。

+0

看來我錯了e.Age = e.Age + 1沒有返回一個值,它確實在返回後返回e.Age的值。 – jensa

回答

6

++運營商,除非重新定義,否則將get,修改和set的值。

檢查此問題的一個好方法是定義get和set,並在調試模式下進行。對於增量和減量運算符,這種行爲也是detailed in the C# specification

+0

請注意,'++'不能在C#中自行重新定義。修改其行爲的唯一方法是重載'+'運算符。 –

+0

好的,所以我在最後的評論中提到了與e.Age = e.Age + 1的等價關係? – jensa

+0

@mikez對,這很重要。我會引用你,如果你確定那 –