在C#中,你可以使用沒有字段的屬性嗎?你可以在C#中使用沒有字段的屬性嗎?
編輯澄清:
private string _name;
public string Name
{
get { return _name; }
set { _name value; }
}
這似乎就像他們總是成對的,有一種情況,我們不使用領域呢?
在C#中,你可以使用沒有字段的屬性嗎?你可以在C#中使用沒有字段的屬性嗎?
編輯澄清:
private string _name;
public string Name
{
get { return _name; }
set { _name value; }
}
這似乎就像他們總是成對的,有一種情況,我們不使用領域呢?
所有屬性必須有一個字段,假設它們是簡單的屬性存儲一個值(*)。但是,該語言(as of version 3.0)提供了一種隱式聲明該字段的方法。例如:
public int Value { get; set; }
這將宣佈一個名爲Value
屬性與隱場後盾它和getter和setter公有。您可以在獲取者或設置者上包含輔助功能關鍵字,以限制對媒體資源的訪問。例如:
public int Value { get; private set; }
在這種情況下,只有擁有類型可能調用setter,但任何類都可以調用getter。
C#的下一個版本將具有處理這些「自動屬性」的附加功能,允許您爲它們提供簡潔的初始化語法。現在,你必須在構造函數中初始化它們。
編輯:根據您編輯的問題,它似乎是值得來解決這個具體的問題:「有一種情況,我們不使用領域呢?」
答案就是,沒有字段根本不常見。但它是可能的,並且並不常見,表示屬性不使用字段作爲屬性的存儲。例如,設想一個Rectangle
物體與Area
屬性:
class Rectangle
{
public double Width { get; private set; }
public double Height { get; private set; }
public double Area { get { return Width * Height; } }
}
顯然,有涉及(兩個)的字段,但是還沒有一個特別專用於Area
屬性字段。
另一個例子是屬性代表的地方。例如,在一個WinForms Form
子類,它是常見的通過屬性以暴露特定的控制值:
class MyForm : Form
{
public string EditText
{
get { return textBox1.Text; }
set { textBox1.Text = value; }
}
}
再次,textBox1
字段被用在這裏。但它實際上代表了財產本身以外的其他東西。該屬性正在使用該字段引用的對象的成員。
我希望能夠澄清字段和屬性之間的關係。如有需要,請隨時要求進一步澄清。
(*)請注意,屬性唯一真正的規則是它們至少有一個getter或setter,並且這些方法可以做任何你想要的。我假設我們在這裏談論簡單的基於價值的屬性。
感謝您的澄清...所以如果我正確地理解你,總有一個字段,它並不總是明確定義。在自動屬性的情況下,C#編譯器會自動添加字段? – 2014-12-03 01:49:24
我認爲這是一個非常混亂的方式來回答這個問題。屬性不需要任何方式的字段。通過自動實現的屬性,編譯器生成一個字段。 – 2014-12-03 01:52:22
@mike z我想這取決於問題的表達方式。如果它是「我需要包含一個屬性字段」的否,如果問題是「每個屬性都有一個字段」,答案就是肯定的。不幸的是,我的問題不太清楚。 – 2014-12-03 01:57:38
如果你問我認爲你是什麼,答案是肯定的,你只需要得到;組;屬性聲明內。 C#爲你封裝了一個變量。
編輯:例如
//no need for field declaration
public string Name
{
get;
set;
}
沒有屬性使用該字段的返回(get)和值(set)? – 2014-12-03 01:40:17
@dbeaulieu它使用內部創建的字段,您不必創建它。 – markg 2014-12-03 01:42:16
屬性是不需要有一個字段
public string Version
{
get
{
return "1.3.Awesome";
}
}
當然,有些屬性是沙漠,沼澤等,您可以使用一塊的財產,即使它沒有在它的字段。一邊開玩笑,我不確定你在問什麼,你能詳細說明一下嗎? – cost 2014-12-03 01:36:13
當然,我會編輯主要的 – 2014-12-03 01:40:56
如果它只是返回一個常量,那麼就沒有字段,例如。 – 2014-12-03 01:46:11