将同一個類編寫在多個檔案中,類的各個檔案名不同,類名相同,類名前加partial關鍵字,這種類型叫分部類。
在分部類中可以建立分部方法,方法名前加關鍵字partial,分部方法隻能将方法分成兩部分,即聲明部分和實作部分分别位于不同的分部類裡。分部方法可以使靜态方法,但必須是隐式的私有方法,并且無傳回值的方法,因為分部方法時私有方法,是以無法使用virtual修飾符,即不能成為虛方法;分部方法可以有ref參數,但不能有out參數;不允許将委托轉換為分部方法。
下例中首先建立項目PartialTypes,主類檔案為Program.cs,在項目中添加一個類檔案SingerDefine.cs,類名為Singer,再添加另一個類檔案SingerImp.cs,類名為Singer。類名前都加partial修飾符
SingerDefine.cs檔案裡聲明兩個私有字段和兩個分布方法,方法名前加關鍵字partial,代碼如下:
[c-sharp] view plaincopy
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace PartialTypes
- {
- internal partial class Singer
- {
- //聲明兩個私有字段
- private string _cn;
- private string _am;
- //聲明兩個分布方法
- partial void getmsgA(string str);
- partial void getmsgB(int i);
- }
- }
SingerImp.cs檔案裡,包含分部方法的實作部分,分部方法組合成一個新方法,定義兩個屬性對私有字段進行讀寫,代碼如下:
- //兩個分部方法的實作部分
- partial void getmsgA(string str)
- {
- Console.WriteLine("getmsgA方法所接收的參數是【{0}】,資料類型是【{1}】", str.ToString(), str.GetType());
- }
- partial void getmsgB(int i)
- Console.WriteLine("getmsgB方法所接收的參數是【{0}】,資料類型是【{1}】", i.ToString(), i.GetType());
- //聲明getmsg方法,調用兩個分部方法
- internal void getmsg(string str, int i)
- getmsgA(str);
- getmsgB(i);
- //聲明兩個屬性,用于讀取和寫入兩個私有字段
- internal string Cn
- get
- {
- return _cn;
- }
- set
- _cn = value;
- internal string Am
- return _am;
- _am = value;
主程式檔案調用分部類,及分部方法,代碼如下:
- class Program
- static void Main(string[] args)
- //建立分部類對象,輸入屬性值
- Singer sin = new Singer();
- Console.Write("請輸入sin對象的Cn屬性值:");
- sin.Cn = Console.ReadLine();
- Console.Write("請輸入sin對象的Am屬性值:");
- sin.Am = Console.ReadLine();
- //輸出
- Console.WriteLine("/n讀取結果,Cn={0},Am={1}", sin.Cn, sin.Am);
- //調用getmsg方法
- sin.getmsg("中美合作", 50);
運作結果:
