C#類類型


一、類和對象

  假設我開了一家烤魚店,每當客人來點餐時,我就會用筆和紙記錄這筆訂單,並計算出每單的價格。以下是記錄的訂單:

單號:00001
種類:清江魚
口味:香辣
配菜:豆腐
價格:140元
------------
單號:00002
種類:江團
口味:蒜香
配菜:海帶
價格:180元

上面所有的內容都需要手寫,當客人多的時候很浪費時間,於是我就去打印店按照以下模板打印點餐單(即紙質訂單):

單號:
種類:
口味:
配菜:
價格:

這樣每位客人點餐時,我就只需要寫下客人點餐的內容即可。

在上面的例子中,我記錄的每一筆訂單都可以看作一個對象,這每一筆訂單都有對應的值使之與其他訂單不同,但是所有訂單都具有相同的屬性和行為,通過抽象出這些屬性和行為得到點餐單,所以點餐單可以看作訂單的類,反之對點餐單填充不同的值,可以得到不同的訂單,也就是不同的對象。通過對上面的理解給類和對象下定義,類是具有相同狀態和行為的一類事物,對象是一個客觀存在且獨一無二的個體。類和對象的關系:類是對對象的抽象,對象是對類的填充或實例化。

 

  類的基本結構:訪問修飾符 class 類名{ },其中大括號里可以是類型成員(常量、字段、屬性、構造函數、方法、事件等)中的一種或多種構成。

  對象的基本結構是類的實例化:類名 變量名 = new 類名();,其中變量名也叫對象。

  下面我們根據上面的例子設計對應的類,並實現相應的對象。(為使代碼簡單,訪問修飾符均用public)

 1 /// <summary>
 2 /// 擁有單號、種類、口味、配菜、價格和計算價格行為的訂單類
 3 /// </summary>
 4 public class Order
 5 {
 6     #region 字段
 7     /// <summary>
 8     /// 單號(單號為自增字段,無需賦值,自增代碼省略)
 9     /// </summary>
10     public int orderNo;
11 
12     /// <summary>
13     /// 種類
14     /// </summary>
15     public string type;
16 
17     /// <summary>
18     /// 口味
19     /// </summary>
20     public string flavor;
21 
22     /// <summary>
23     /// 配菜
24     /// </summary>
25     public string garnish;
26 
27     /// <summary>
28     /// 價格
29     /// </summary>
30     public decimal price;
31     #endregion
32 
33     #region 方法
34     /// <summary>
35     /// 計算價格
36     /// </summary>
37     /// <param name="type">魚的種類</param>
38     /// <param name="garnish">配菜種類</param>
39     public void CalculateThePrice(string type, string garnish)
40     {
41         //通過魚的種類和配菜種類計算價格,過程省略
42     }
43     #endregion
44 }
45 /// <summary>
46 /// 實現對象的類
47 /// </summary>
48 public class RealizeObject
49 {
50     #region 方法
51     /// <summary>
52     /// 實現
53     /// </summary>
54     public void Realize()
55     {
56         //清江魚香辣味加豆腐配菜需要140元的訂單對象
57         Order order = new Order();
58         order.type = "清江魚";
59         order.flavor = "香辣";
60         order.garnish = "豆腐";
61         order.price = 140;//直接賦予價格
62         order.CalculateThePrice("清江魚", "豆腐");//通過行為計算價格
63 
64         //江團醬香味加海帶配菜需要180元的訂單對象
65         Order orderTwo = new Order();
66         orderTwo.type = "江團";
67         orderTwo.flavor = "醬香";
68         orderTwo.garnish = "海帶";
69         orderTwo.price = 180;//直接賦予價格
70         orderTwo.CalculateThePrice("江團", "海帶");//通過行為計算價格
71     }
72     #endregion
73 }

  詳解類的實例化過程:Order order = new Order();等號前半部分定義一個類型為Order的變量order,這個變量的值為null;當加上等號后半部分時,才給order變量賦值,並且Order的構造函數會為order的所有字段賦默認值。用點餐單的例子講當沒有等號后半部分時,我想把一張白紙order用作點餐單,但我還沒有去打印,當加上等號后半部分后,order這張白紙被我打印成了點餐單,並且我可能在打印完后立馬填充對應的值。

二、類和對象相關語法

1、對象初始化語法:使用默認構造函數創建對象並設置對象數據值的簡寫形式。代碼如下:

 1 public class Garnish { }
 2 public class Order
 3 {
 4     /// <summary>
 5     /// 種類
 6     /// </summary>
 7     public string Type { get; set; }
 8 
 9     /// <summary>
10     /// 口味
11     /// </summary>
12     public string Flavor { get; set; }
13 
14     /// <summary>
15     /// 配菜
16     /// </summary>
17     public string Garnish { get; set; }
18 
19     /// <summary>
20     /// 價格
21     /// </summary>
22     public decimal Price { get; set; }
23 
24     /// <summary>
25     /// 其他配菜
26     /// </summary>
27     public Garnish OtherGarnish { get; set; }
28 
29     public Order() { }
30 
31     public Order(string type, string flavor, string garnish)
32     {
33         Type = type;
34         Flavor = flavor;
35         Garnish = garnish;
36     }
37 }
38 public class RealizeObject
39 {
40     public void Realize()
41     {
42         //清江魚香辣味加豆腐配菜需要140元的訂單對象
43         //傳統方式如下:
44         Order order = new Order();
45         order.Type = "清江魚";
46         order.Flavor = "香辣";
47         order.Garnish = "豆腐";
48         order.Price = 140;//直接賦予價格
49         //對象初始化語法如下:
50         Order order = new Order//也可以加上(),顯式調用默認構造函數
51         {
52             Type = "清江魚",
53             Flavor = "香辣",
54             Garnish = "豆腐",
55             Price = 140
56         };
57 
58         //江團醬香味加海帶配菜需要180元的訂單對象
59         //傳統方式如下:
60         Order orderTwo = new Order("江團", "醬香", "海帶");
61         orderTwo.Price = 180;//直接賦予價格
62         //調用自定義構造函數的對象初始化語法如下:
63         Order orderTwo = new Order("江團", "醬香", "海帶")
64         {
65             Price = 180
66         };
67 
68         //在Order類中包含其他類型的屬性時,對象初始化語法也可以嵌套使用
69         Order orderThree = new Order
70         {
71             OtherGarnish = new Garnish { }
72         };
73     }
74 }

2、部分類型:當一個類的代碼過長時,可以通過partial關鍵字把這個類分割成兩個甚至更多(物理文件分割成多個,邏輯上還是一個),一般會把不變的部分和可變的部分分割開來。

 1 /// <summary>
 2 /// 不變的部分
 3 /// </summary>
 4 public partial class Order
 5 {
 6     //字段
 7 
 8     //構造函數
 9 }
10 /// <summary>
11 /// 可變的部分
12 /// </summary>
13 public partial class Order
14 {
15     //屬性
16 
17     //方法
18 }

注:定義分部類的唯一要求是類型名稱必須相同,並且必須定義在相同的命名空間中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM