天天看點

C# 類的成員——字段、方法、構造函數和屬性

本博文為半摘記性質

——

聲明:本文内容系網際網路整理收集,内容有改動。主要參考資料:

https://www.runoob.com/csharp/csharp-tutorial.html 菜鳥教程

https://docs.microsoft.com/zh-cn/dotnet/csharp/ Microsoft C#文檔

零散的資料在每章節末尾給出。

————

類描述了一組有相同屬性和相同方法的對象。

0類的成員

類的成員如下圖所示:

C# 類的成員——字段、方法、構造函數和屬性

本文主講字段、方法和屬性。

1方法

一個方法是把一些相關的語句組織在一起,用來執行一個任務的語句塊。每一個 C# 程式至少有一個帶有 Main 方法的類,要使用一個方法,需要定義方法并調用方法。

方法的定義模闆:

<Access Specifier> <Return Type> <Method Name>(Parameter List)//通路修飾符;傳回類型;方法名稱;參數清單
{
   Method Body//方法主體
}  //template
——
class Shape//定義類
   {
      public void setWidth(int w)//定義方法
      {
         width = w;
      }
   } //example
           

方法可以用通路修飾符進行封裝。(詳見【字段】章節)

main方法

定義格式:

tatic void Main(string[] args)
{
...
}
           

string[ ] args 指的就是你在指令視窗輸入的參數,也就是指令行參數。

函數與方法的關系

方法在某種程度上相當于C語言的函數。但在正式的c#術語中區分函數和方法。在c#術語中,“函數成員”不僅包含方法,也包含類或結構的一些非資料成員,如索引器、運算符、構造函數和析構函數等,甚至還有屬性。這些都不是資料成員,字段、常量和事件才是資料成員。

方法一般不傳回資料,而函數通常都傳回資料。現在一般不區分兩者,統一叫方法。

2構造函數

  1. 構造函數不能被直接調用,必須通過new運算符在建立對象時才會自動調用;
  2. 一個類可以有多個構造函數(構造函數的重載)。
  3. 構造函數必須存在。如果沒有為類提供構造函數,則 C# 将預設建立一個構造函數,該函數會執行個體化對象并将成員變量設定為預設值。

類的 構造函數 是類的一個特殊的成員函數,是一種特殊的方法,主要用來在建立對象時初始化對象(為新對象的成員變量賦初始值),總與new運算符一起使用對該類進行執行個體化( 執行個體化對象就是調用合适的構造函數進行類的執行個體化)。

構造函數的名稱與類的名稱完全相同,它沒有任何傳回類型。 預設的構造函數沒有任何參數。帶有參數的構造函數叫做參數化構造函數,可以在建立對象的同時給對象賦初始值。

class Chinar
    {
        private int    a = 1;
        private int    b = 1;
        private string c = "Chinar";
        private object d = 666;


        //構造函數用來完成 —— 初始化工作
        public Chinar() //聲明構造函數,函數名與類名相同
        {
            //每個類,本身預設有一個。如果我們不寫明這個  public Chinar()函數,系統僅調用系統預設的。
            //自定義構造 public Chinar()函數後,系統隻會調用自定義的 Chinar()
        }

——————
        //這是一個多參數的構造函數
        public Chinar(int a, int b, string c, object d)
        {
        ...
        }
    }
           

new 運算符:用于建立對象和調用構造函數(即類的執行個體化),格式為:

類 執行個體名 = new   類();
例:Shape sha = new Shape();
           

3字段

字段又稱為“成員變量”,一般用在一個類内部做資料互動使用,通常使用private修飾。

字段的資料類型有:

C# 類的成員——字段、方法、構造函數和屬性

通路修飾符有:

public:所有對象都可以通路;
private:對象本身在對象内部可以通路;
protected:隻有該類對象及其子類對象可以通路
internal:同一個程式集的對象可以通路;
protected internal:通路限于目前程式集或派生自包含類的類型。
           

執行個體:

class Shape//定義類
   {
      public void setWidth(int w)//定義方法
      {
         width = w;
      }
      protected int width;//定義字段(成員變量)
      protected int height;
   }
           

4屬性

屬性是 C# 中的一等公民。

屬性屬于進階概念,在OOP(面向對象)中,主要使用屬性來描述對象的靜态特征(即屬性是對象的一個特征)。屬性一般采用public修飾。

屬性(Property) 是類(class)、結構(structure)和接口(interface)的命名(named)成員。

類或結構中的成員變量或方法稱為 域(Field)。屬性(Property)是域(Field)的擴充,且可使用相同的文法來通路。它們使用 通路器(accessors) 讓私有域的值可被讀寫或操作。通路器聲明可包含一個 get 通路器、一個 set 通路器,或者同時包含二者。

老式屬性聲明格式

屬性的定義格式(舉例):

// 聲明類型為 string 的 Code 屬性
public string Code
{
   get//讀私有域
   {
      return code;
   }
   set//寫私有域
   {
      code = value;
   }
}
           

使用格式為:

// 建立一個新的 Student 對象
 Student s = new Student();
 s.Code = "001";
           

新式屬性聲明格式

屬性可以被編譯器自動實作。

當屬性通路器中不需要任何其他邏輯時,我們可以使用自動實作的屬性,它會使屬性聲明更加簡潔。自動實作的屬性在編譯後,也是生成了老式的讀/寫屬性。

鍵入“prop”連按兩次“Tab”,可自動快速生成。

屬性和字段的差別

C#屬性是字段的擴充

屬性是類或對象中的一種智能字段形式。 從對象外部,它們看起來像對象中的字段。 但是,屬性可以通過豐富的 C# 功能來實作。

通路屬性時,其行為類似于字段。 但與字段不同的是,屬性通過通路器實作。

繼續閱讀