2013-09-23 66 views
-4

C#中的許多代碼示例包含getset代碼塊。他們的目的是什麼?我複製這些塊,它們出現在示例代碼中,但不知道它用於什麼。有人可以向我解釋這個嗎?get:set的目的是什麼?

+1

屬性。 http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx –

+0

閱讀關於面向對象編程和[封裝](http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)) – Habib

+0

你有沒有試過這個:http://www.google.com/search?q=.net+c%23+get+set? – Olexander

回答

0

在英語中,他們是制定者和獲得者。

希望你能教給自己封裝,封裝,封裝和setter獲得提升。

再次用簡單的英語,setter和getters讓你能夠訪問你定義的屬性。

2
public int foo { get; set; } 

這定義了一個屬性。它基本上就像一個公共領域,但當涉及到反思時就不一樣了。在C#/ .NET中,通常使用屬性作爲公共事物。您可以將它與Java中的getter/setter方法進行比較。

的真棒事情現在是,你還可以使用自定義的得到 /集代碼或使setget不太明顯。這樣可以讓getter/setter方法的優點沒有方法調用的醜陋而不是屬性訪問。

public int foo { 
    get { return this.some_foo; } 
    set { this.some_foo = value; this.run_code_after_change(); } 
}; 
4

getter和setter方法讓你一對函數組合成一個屬性,讓你使用一種語法,看起來像一個成員訪問表達式或替代語法的分配,看起來像一個明確的函數調用。

這裏是一個小例子:而不是這個

class Example { 
    private int x; 
    public int GetX() {return x;} 
    public void SetX(int value) { x = value;} 
} 
Example e = new Example(); 
e.SetX(123); 
Console.WriteLine("X = {0}", e.GetX()); 

他們讓你這樣做:

class Example { 
    public int X {get;set;} 
} 
Example e = new Example(); 
e.X = 123; 
Console.WriteLine("X = {0}", e.X); 

的第二代碼片段的語法更容易閱讀,因爲X看起來像變量。同時,第二個片段提供了與encapsulation相同的級別,讓您隱藏屬性後面的實現。

3

你的意思是這個?:

public int SomeValue { get; set; } 

這基本上是這樣的句法簡化:

private int someValue; 
public int SomeValue 
{ 
    get { return someValue; } 
    set { someValue = value; } 
} 

這本身就是基本上這個簡寫:

private int someValue; 
public int GetSomeValue() { return someValue; } 
public void SetSomeValue(int value) { someValue = value; } 

(雖然編譯器在執行此操作時使用不同的約定來表示事物的名稱。)

因爲它涉及到OOP,所以這是數據的封裝。這個想法是對象應該隱藏自己的數據並公開功能,而不是直接暴露數據。所以你不一定直接從對象外部修改someValue。您在對象上調用方法併爲其提供一個值。對象在內部處理其數據的實際存儲。

0

getset是一種語法糖。它是實現函數的可讀性更強的方法,不需要參數,您可以在其中插入驗證(在setter中)或在getter中的字段上進行計算。括號在功能上是無用的。