1. 程式人生 > 其它 >C#基礎_15_類

C#基礎_15_類

C# 類(Class)

當你定義一個類時,你定義了一個數據型別的藍圖。這實際上並沒有定義任何的資料,但它定義了類的名稱意味著什麼,也就是說,類的物件由什麼組成及在這個物件上可執行什麼操作。物件是類的例項。構成類的方法和變數稱為類的成員

類的定義

類的定義是以關鍵字 class 開始,後跟類的名稱。類的主體,包含在一對花括號內。下面是類定義的一般形式:

 1 <access specifier> class  class_name
 2 {
 3     // member variables
 4     <access specifier> <data type> variable1;
5 <access specifier> <data type> variable2; 6 ... 7 <access specifier> <data type> variableN; 8 // member methods 9 <access specifier> <return type> method1(parameter_list) 10 { 11 // method body 12 } 13 <access specifier> <return
type> method2(parameter_list) 14 { 15 // method body 16 } 17 ... 18 <access specifier> <return type> methodN(parameter_list) 19 { 20 // method body 21 } 22 }

請注意:

  • 訪問識別符號 <access specifier> 指定了對類及其成員的訪問規則。如果沒有指定,則使用預設的訪問識別符號。類的預設訪問識別符號是 internal
    ,成員的預設訪問識別符號是 private
  • 資料型別 <data type> 指定了變數的型別,返回型別 <return type> 指定了返回的方法返回的資料型別。
  • 如果要訪問類的成員,你要使用點(.)運算子。
  • 點運算子連結了物件的名稱和成員的名稱。

下面的例項說明了目前為止所討論的概念:

 1 using System;
 2 namespace BoxApplication
 3 {
 4     class Box
 5     {
 6        public double length;   // 長度
 7        public double breadth;  // 寬度
 8        public double height;   // 高度
 9     }
10     class Boxtester
11     {
12         static void Main(string[] args)
13         {
14             Box Box1 = new Box();        // 宣告 Box1,型別為 Box
15             Box Box2 = new Box();        // 宣告 Box2,型別為 Box
16             double volume = 0.0;         // 體積
17 
18             // Box1 詳述
19             Box1.height = 5.0;
20             Box1.length = 6.0;
21             Box1.breadth = 7.0;
22 
23             // Box2 詳述
24             Box2.height = 10.0;
25             Box2.length = 12.0;
26             Box2.breadth = 13.0;
27            
28             // Box1 的體積
29             volume = Box1.height * Box1.length * Box1.breadth;
30             Console.WriteLine("Box1 的體積: {0}",  volume);
31 
32             // Box2 的體積
33             volume = Box2.height * Box2.length * Box2.breadth;
34             Console.WriteLine("Box2 的體積: {0}", volume);
35             Console.ReadKey();
36         }
37     }
38 }

產生下列結果:

1 Box1 的體積: 210
2 Box2 的體積: 1560

成員函式和封裝

類的成員函式是一個在類定義中有它的定義或原型的函式,就像其他變數一樣。作為類的一個成員,它能在類的任何物件上操作,且能訪問該物件的類的所有成員。

成員變數是物件的屬性(從設計角度),且它們保持私有來實現封裝。這些變數只能使用公共成員函式來訪問。

讓我們使用上面的概念來設定和獲取一個類中不同的類成員的值:

 1 using System;
 2 namespace BoxApplication
 3 {
 4     class Box
 5     {
 6        private double length;   // 長度
 7        private double breadth;  // 寬度
 8        private double height;   // 高度
 9        public void setLength( double len )
10        {
11             length = len;
12        }
13 
14        public void setBreadth( double bre )
15        {
16             breadth = bre;
17        }
18 
19        public void setHeight( double hei )
20        {
21             height = hei;
22        }
23        public double getVolume()
24        {
25            return length * breadth * height;
26        }
27     }
28     class Boxtester
29     {
30         static void Main(string[] args)
31         {
32             Box Box1 = new Box();        // 宣告 Box1,型別為 Box
33             Box Box2 = new Box();                // 宣告 Box2,型別為 Box
34             double volume;                               // 體積
35 
36 
37             // Box1 詳述
38             Box1.setLength(6.0);
39             Box1.setBreadth(7.0);
40             Box1.setHeight(5.0);
41 
42             // Box2 詳述
43             Box2.setLength(12.0);
44             Box2.setBreadth(13.0);
45             Box2.setHeight(10.0);
46        
47             // Box1 的體積
48             volume = Box1.getVolume();
49             Console.WriteLine("Box1 的體積: {0}" ,volume);
50 
51             // Box2 的體積
52             volume = Box2.getVolume();
53             Console.WriteLine("Box2 的體積: {0}", volume);
54            
55             Console.ReadKey();
56         }
57     }
58 }

產生下列結果:

1 Box1 的體積: 210
2 Box2 的體積: 1560

C# 中的建構函式

類的 建構函式 是類的一個特殊的成員函式,當建立類的新物件時執行。

建構函式的名稱與類的名稱完全相同,它沒有任何返回型別

下面的例項說明了建構函式的概念:

 1 using System;
 2 namespace LineApplication
 3 {
 4    class Line
 5    {
 6       private double length;   // 線條的長度
 7       public Line()
 8       {
 9          Console.WriteLine("物件已建立");
10       }
11 
12       public void setLength( double len )
13       {
14          length = len;
15       }
16       public double getLength()
17       {
18          return length;
19       }
20 
21       static void Main(string[] args)
22       {
23          Line line = new Line();    
24          // 設定線條長度
25          line.setLength(6.0);
26          Console.WriteLine("線條的長度: {0}", line.getLength());
27          Console.ReadKey();
28       }
29    }
30 }

產生下列結果:

1 物件已建立
2 線條的長度: 6

預設的建構函式沒有任何引數。但是如果你需要一個帶有引數的建構函式可以有引數,這種建構函式叫做引數化建構函式。這種技術可以幫助你在建立物件的同時給物件賦初始值,具體請看下面例項:

 1 using System;
 2 namespace LineApplication
 3 {
 4    class Line
 5    {
 6       private double length;   // 線條的長度
 7       public Line(double len)  // 引數化建構函式
 8       {
 9          Console.WriteLine("物件已建立,length = {0}", len);
10          length = len;
11       }
12 
13       public void setLength( double len )
14       {
15          length = len;
16       }
17       public double getLength()
18       {
19          return length;
20       }
21 
22       static void Main(string[] args)
23       {
24          Line line = new Line(10.0);
25          Console.WriteLine("線條的長度: {0}", line.getLength());
26          // 設定線條長度
27          line.setLength(6.0);
28          Console.WriteLine("線條的長度: {0}", line.getLength());
29          Console.ReadKey();
30       }
31    }
32 }

產生下列結果:

1 物件已建立,length = 10
2 線條的長度: 10
3 線條的長度: 6

C# 中的解構函式

類的 解構函式 是類的一個特殊的成員函式,當類的物件超出範圍時執行。

解構函式的名稱是在類的名稱前加上一個波浪形(~)作為字首,它不返回值,也不帶任何引數

解構函式用於在結束程式(比如關閉檔案、釋放記憶體等)之前釋放資源解構函式不能繼承或過載

下面的例項說明了解構函式的概念:

 1 using System;
 2 namespace LineApplication
 3 {
 4    class Line
 5    {
 6       private double length;   // 線條的長度
 7       public Line()  // 建構函式
 8       {
 9          Console.WriteLine("物件已建立");
10       }
11       ~Line() //解構函式
12       {
13          Console.WriteLine("物件已刪除");
14       }
15 
16       public void setLength( double len )
17       {
18          length = len;
19       }
20       public double getLength()
21       {
22          return length;
23       }
24 
25       static void Main(string[] args)
26       {
27          Line line = new Line();
28          // 設定線條長度
29          line.setLength(6.0);
30          Console.WriteLine("線條的長度: {0}", line.getLength());          
31       }
32    }
33 }

會產生下列結果:

1 物件已建立
2 線條的長度: 6
3 物件已刪除

C# 類的靜態成員

我們可以使用 static 關鍵字把類成員定義為靜態的。當我們宣告一個類成員為靜態時,意味著無論有多少個類的物件被建立,只會有一個該靜態成員的副本。

關鍵字 static 意味著類中只有一個該成員的例項。靜態變數用於定義常量,因為它們的值可以通過直接呼叫類而不需要建立類的例項來獲取。靜態變數可在成員函式或類的定義外部進行初始化。你也可以在類的定義內部初始化靜態變數。

下面的例項演示了靜態變數的用法: