C# 欄位、屬性、成員變數

來源:互聯網
上載者:User

標籤:c#   field   property   區別   

引言:
C#與java,C++中的這些基本概念略有不同。因為容易混淆,所以這裡總結下區別。希望能對初學者有協助!
一.定義與作用

1.欄位(field):是C#類層級定義的,和方法同一層級。

  • 一般用來類內部進行訪問,充當一種類中的"全域變數"角色;
  • 或者配合屬性來使用

2.屬性:同樣是C#類層級定義的,一般是供外部類訪問的。

3.成員變數:"全域變數",在類中定義的變數,區別於在方法中定義的局部變數。它與欄位屬性不是同一層級概念,欄位,屬性都可以叫做成員變數。

二.使用

class Basic

{

private string FieldVar;//這是欄位,在當前類中調用

private string fieldVarForProperty;//這是欄位,配合屬性用

public string  FieldVarForProperty//這是屬性

{

get{return fieldVarForProperty;}//屬性中使用了欄位

set{ fieldVarForProperty=value;}

}

}

這裡可以看出:欄位就是變數,而屬性則類似於方法。屬效能夠使得外部類訪問當前類的欄位。這裡存在一些問題:

1.有人說,那我們可以將欄位定義為public,那外部不就可以訪問了。

確實可以訪問,但是違背了類的設計原則。物件導向要求對資料進行封裝。如果這裡我們將欄位定義為public,來使外部存取,那麼外部就會隨意的破壞我們的欄位。所以不這麼做

 

2.有人說,屬性為什麼要配合欄位使用呢

直接定義成下面這樣不就可以了

public  string FieldProperty

{

get {return FieldProperty;}

set{FieldProperty=value;}

}

編譯確實沒有問題,能夠通過。但是思考一下,當我們調用get/set方法時,在方法體內又使用了FieldProperty屬性,是個死迴圈,程式會down掉的

註:C#是有自動實作屬性的,就是說

public string FieldProperty

{

get;set;

}

C#會自動為你聲明一個私人欄位的

三.欄位與屬性區別
1. 欄位總是可讀可寫(readonly關鍵字除外)屬性可讀可寫(至少要有一樣)
2.欄位總是立即執行,效率高。屬性還需要調用方法,效率低
3.欄位能作為ref,out參數,屬性不可以

 

 

C# 欄位、屬性、成員變數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.