2011-07-21 53 views
2
public class A { 
    public Par mParams; 
    public Par Parameters { 
     get { return mParams; } 
     set { mParams = value; } 
    } 
} 

我是新來的C#這段代碼在c#中做了什麼?它的目的是什麼?

什麼是public Par Parameters?這似乎既不是一個班級,也不是一個功能困惑在這裏。

+3

只是一個方面的說明,你通常使mParams'私人',因爲你不想暴露你的成員變量,並公開你使用屬性。在較新的.NET版本中,您可以使用一些稱爲自動實現的屬性,只是看起來像這樣'public Par Parameters {get;組; }'不需要'mParams'。 –

回答

9

把它想成Java中的public Par getParameters()public void setX(Par p)方法。所以它最接近一個「函數」,但它實際上被稱爲屬性。您可以使用它像這樣:

A myObject = new A(); 
a.Parameters = new Par(...); 

這是由公共領域支持的屬性,在這種情況下,有些多餘,mParms應聲明爲protectedprivate

我建議您在Properties上查看這個MSDN Programming Guide。它很好地解釋了它們是如何工作的以及它們的用途。

+0

謝謝你Nate。 –

+0

不客氣。快樂編程! – Nate

+0

@David Degea - 不要忘記接受Nate的回答(或者你選擇的是誰,但我認爲Nate給出了最好的答案和簡潔的答案)。 – Tim

2

public Par Parameters是一個屬性,用於設置或獲取mParams的值。

+0

謝謝蒂姆。/ –

3

的代碼Public Par Parameters塊是物業

我懷疑行public Par mParams;實際上應該是私有的。它的意思是存儲該屬性值的基礎變量。

其值得指出的是,在C#中不再明確需要mParams。您可以定義一個自動屬性,編譯器在其中使用創建自己的下層專用變量:

Public Par Parameters { get; set; } 
+0

這應該是一條評論。 –

+0

同意 - 不是我最好的答案 - 我已經改進了,但爲時已晚:-( – iandotkelly

2

這對存取函數的簡寫。又如:

private int i = 0; 
public int myNumber { 
    get { return i; } 
    set { i = value; } 
} 

允許您更改變量i。像這樣的代碼:

className.myNumber = 20; 
// className.i is now 20 
+0

做一個合理的工作來解釋發生了什麼,但你忘記提及他們被稱爲屬性:) – Thorarin

1

這是一個property,其工作方式非常像一對方法(函數),其唯一目的是給你訪問到mParams領域。作爲syntactic sugar的一部分,C#使您能夠像對變量一樣分配和讀取數據。把它看作兩種方法,getParameterssetParameters,你不能直接調用,但是當你訪問Parameters時調用它。

Parameters = new Par(); //Works as though you had run: setParameters(new Par()); 
Par x = Parameters;  //Works as though you had run: Par x = getParameters(); 

這可以讓你使用更短,更方便,更表現可變的語法,但你實際上做的是運行由編譯器創建了兩個「隱形」的方法。

2

Parameters是類型ParProperty。它有一個access modifierpublic),這意味着它可以從代碼中的任何地方訪問。

您的示例有點多餘,因爲mParams field實際上是可公開訪問的,並且公開它的屬性除了返回和設置字段外沒有任何作用。但是,您可能會在每個「訪問器」(get和set位)中添加額外的代碼。例如做驗證,通知的東西的屬性已經改變,等

您使用性質大致相同的方式作爲字段:

A foo = new A(); 

// Calls the "get" accessor of the Parameters property 
if (foo.Parameters == null) 
{ 
    // Calls the "set" accessor of the Parameters property 
    foo.Parameters = new Par(); 
} 

它被認爲是最好的做法,不允許直接訪問到類外的成員字段(變量)。在一般情況下,本場應該因此是私有的(或有時保護):

private Par mParams; 

public Par Parameters 
{ 
    get { return mParams; } 
    set { mParams = value; } 
} 

有你想了解還有一些稍微不同的語法。首先,有auto-implemented property

public Par Parameters 
{ 
    get; 
    set; 
} 

對於自動實現屬性,C#編譯器爲你自動生成支持字段。如果我們的屬性getter和setter不需要包含任何邏輯,這就可以避免編寫一些代碼。

您也可以使用屬性來限制訪問的方式,你不能用領域實現:

public Par Parameters 
{ 
    get; 
    private set; 
} 

通知的set「訪問」有它自己的訪問修飾符。結果是一個公共可讀的屬性,但只允許該類本身進行設置。這類似於:

private Par mParams; 

public Par Parameters 
{ 
    get { return mParams; } 
} 

哪一個能夠有效地做同樣的事情,但沒有自動實現的屬性。

在不支持屬性的語言中,所有這些都可以通過創建兩個methodsGetParametersSetParameters來實現。實際上,C#編譯器會在後臺生成一些非常類似的命名方法。