2009-08-21 23 views

回答

40

它是簡寫:

private string _name; 

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

編譯器生成的成員變量。這被稱爲automatic property

+9

...儘管該字段的名稱實際上是一個作爲C#標識符無效的「無法形容的」名稱(例如'<> __ name')。這會阻止您直接從您的代碼訪問該字段。規範術語是「自動實施的財產」,但大多數人的確將其稱爲自動財產:) – 2009-08-21 06:19:16

+0

@phoog:當然,你的意思是'迂腐'(或者馬克指出 - 'pedantry')? :D – stuxnetting 2015-09-03 00:07:27

+0

@stuxnetting「pedantryism」是個玩笑。只是在說'。爲了記錄和所有。 – phoog 2015-09-24 22:43:25

10

這是一個自動讀寫屬性。這是一個C#3.0的補充。例如:

public class Car { 
    private string name; 
    public string Name { get { return name; } set { name = value; } } 
} 

除了您不能直接訪問支持字段。

3

正是這樣做的equivilent:

private string _Text; 

public string Text 
{ 
    get { return _Text; } 
    set { _Text = value; } 
} 

除非你沒有訪問私有變量,而類中。

+1

所以如果你想保留私有變量,你必須使用「舊」格式(如你的例子)? – Rado 2015-03-08 18:18:31

4

它被稱爲自動執行的屬性,並且是new to C# 3.0。當您訪問該屬性不需要任何特殊行爲或驗證時,這是一種更清晰的語法。它在功能上類似:

public class Car 
{ 
    private string _name; 
    public string Name 
    { 
    get { return _name; } 
    set {_name = value; } 
    } 
} 

所以它保存的代碼中有相當,但後來離開你的選項來修改訪問邏輯,如果行爲或規則需要改變。

25

簡而言之,它們被稱爲屬性訪問器。它們的實現可以解釋如下:

1.get {return name} 當屬性爲閱讀時,get訪問器中的代碼塊被執行。

2.設置{名稱=值} 當屬性爲分配一個新的值在設定訪問該代碼塊被執行。

例如,當你指的這個屬性,如下

人員P =新的Person()(假設使用的是C#)

class Person 
{ 
    private string name; // the name field 
    public string Name // the Name property 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
     } 
    } 
} 
  1. 現在; //實例化的類或創建對象 ' 「類的 'p人'

    System.Console.Write(p.Name); //The get accessor is invoked here 
    

獲取訪問器被調用到讀取屬性的值,即編譯器試圖讀取字符串'name'的值。

2.當您指定值(使用參數)的「名稱」屬性如下

Person p = new Person(); 
p.Name = "Stack" // the set accessor is invoked here 
Console.Writeline(p.Name) //invokes the get accessor 
Console.ReadKey(); //Holds the output until a key is pressed 

set訪問分配值「疊加」到「Name屬性即'堆棧' 存儲在字符串 '名'

輸出繼電器:

堆棧

+6

首先得到並設置的原因是什麼,爲什麼不只是使用一個訪問器來設置和獲取,這是沒有人能夠簡單回答的問題。 – JsonStatham 2015-11-13 17:37:30