public class A {
public Par mParams;
public Par Parameters {
get { return mParams; }
set { mParams = value; }
}
}
我是新來的C#這段代碼在c#中做了什麼?它的目的是什麼?
什麼是public Par Parameters
?這似乎既不是一個班級,也不是一個功能困惑在這裏。
public class A {
public Par mParams;
public Par Parameters {
get { return mParams; }
set { mParams = value; }
}
}
我是新來的C#這段代碼在c#中做了什麼?它的目的是什麼?
什麼是public Par Parameters
?這似乎既不是一個班級,也不是一個功能困惑在這裏。
把它想成Java中的public Par getParameters()
和public void setX(Par p)
方法。所以它最接近一個「函數」,但它實際上被稱爲屬性。您可以使用它像這樣:
A myObject = new A();
a.Parameters = new Par(...);
這是由公共領域支持的屬性,在這種情況下,有些多餘,mParms應聲明爲protected
或private
。
我建議您在Properties上查看這個MSDN Programming Guide。它很好地解釋了它們是如何工作的以及它們的用途。
public Par Parameters
是一個屬性,用於設置或獲取mParams的值。
謝謝蒂姆。/ –
的代碼Public Par Parameters
塊是物業
我懷疑行public Par mParams;
實際上應該是私有的。它的意思是存儲該屬性值的基礎變量。
其值得指出的是,在C#中不再明確需要mParams。您可以定義一個自動屬性,編譯器在其中使用創建自己的下層專用變量:
Public Par Parameters { get; set; }
這應該是一條評論。 –
同意 - 不是我最好的答案 - 我已經改進了,但爲時已晚:-( – iandotkelly
這對存取函數的簡寫。又如:
private int i = 0;
public int myNumber {
get { return i; }
set { i = value; }
}
允許您更改變量i
。像這樣的代碼:
className.myNumber = 20;
// className.i is now 20
做一個合理的工作來解釋發生了什麼,但你忘記提及他們被稱爲屬性:) – Thorarin
這是一個property,其工作方式非常像一對方法(函數),其唯一目的是給你訪問到mParams
領域。作爲syntactic sugar的一部分,C#使您能夠像對變量一樣分配和讀取數據。把它看作兩種方法,getParameters
和setParameters
,你不能直接調用,但是當你訪問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();
這可以讓你使用更短,更方便,更表現可變的語法,但你實際上做的是運行由編譯器創建了兩個「隱形」的方法。
Parameters
是類型Par
的Property。它有一個access modifier(public
),這意味着它可以從代碼中的任何地方訪問。
您的示例有點多餘,因爲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; }
}
哪一個能夠有效地做同樣的事情,但沒有自動實現的屬性。
在不支持屬性的語言中,所有這些都可以通過創建兩個methods:GetParameters
和SetParameters
來實現。實際上,C#編譯器會在後臺生成一些非常類似的命名方法。
只是一個方面的說明,你通常使mParams'私人',因爲你不想暴露你的成員變量,並公開你使用屬性。在較新的.NET版本中,您可以使用一些稱爲自動實現的屬性,只是看起來像這樣'public Par Parameters {get;組; }'不需要'mParams'。 –