2014-12-03 92 views
0

在C#中,你可以使用沒有字段的屬性嗎?你可以在C#中使用沒有字段的屬性嗎?

編輯澄清:

private string _name; 

public string Name 
{ 
    get { return _name; } 
    set { _name value; } 
} 

這似乎就像他們總是成對的,有一種情況,我們不使用領域呢?

+0

當然,有些屬性是沙漠,沼澤等,您可以使用一塊的財產,即使它沒有在它的字段。一邊開玩笑,我不確定你在問什麼,你能詳細說明一下嗎? – cost 2014-12-03 01:36:13

+0

當然,我會編輯主要的 – 2014-12-03 01:40:56

+0

如果它只是返回一個常量,那麼就沒有字段,例如。 – 2014-12-03 01:46:11

回答

2

所有屬性必須有一個字段,假設它們是簡單的屬性存儲一個值(*)。但是,該語言(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,並且這些方法可以做任何你想要的。我假設我們在這裏談論簡單的基於價值的屬性。

+0

感謝您的澄清...所以如果我正確地理解你,總有一個字段,它並不總是明確定義。在自動屬性的情況下,C#編譯器會自動添加字段? – 2014-12-03 01:49:24

+1

我認爲這是一個非常混亂的方式來回答這個問題。屬性不需要任何方式的字段。通過自動實現的屬性,編譯器生成一個字段。 – 2014-12-03 01:52:22

+0

@mike z我想這取決於問題的表達方式。如果它是「我需要包含一個屬性字段」的否,如果問題是「每個屬性都有一個字段」,答案就是肯定的。不幸的是,我的問題不太清楚。 – 2014-12-03 01:57:38

1

如果你問我認爲你是什麼,答案是肯定的,你只需要得到;組;屬性聲明內。 C#爲你封裝了一個變量。

編輯:例如

//no need for field declaration 
public string Name 
{ 
    get; 
    set; 
} 
+0

沒有屬性使用該字段的返回(get)和值(set)? – 2014-12-03 01:40:17

+0

@dbeaulieu它使用內部創建的字段,您不必創建它。 – markg 2014-12-03 01:42:16

1

屬性是不需要有一個字段

public string Version 
{ 
    get 
    { 
     return "1.3.Awesome"; 
    } 
} 
相關問題