天天看點

C#分部類和分部方法的使用

将同一個類編寫在多個檔案中,類的各個檔案名不同,類名相同,類名前加partial關鍵字,這種類型叫分部類。

        在分部類中可以建立分部方法,方法名前加關鍵字partial,分部方法隻能将方法分成兩部分,即聲明部分和實作部分分别位于不同的分部類裡。分部方法可以使靜态方法,但必須是隐式的私有方法,并且無傳回值的方法,因為分部方法時私有方法,是以無法使用virtual修飾符,即不能成為虛方法;分部方法可以有ref參數,但不能有out參數;不允許将委托轉換為分部方法。

        下例中首先建立項目PartialTypes,主類檔案為Program.cs,在項目中添加一個類檔案SingerDefine.cs,類名為Singer,再添加另一個類檔案SingerImp.cs,類名為Singer。類名前都加partial修飾符

SingerDefine.cs檔案裡聲明兩個私有字段和兩個分布方法,方法名前加關鍵字partial,代碼如下:

[c-sharp] view plaincopy

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. namespace PartialTypes  
  6. {  
  7.     internal partial class Singer  
  8.     {  
  9.         //聲明兩個私有字段  
  10.         private string _cn;  
  11.         private string _am;  
  12.         //聲明兩個分布方法  
  13.         partial void getmsgA(string str);  
  14.         partial void getmsgB(int i);  
  15.     }  
  16. }  

SingerImp.cs檔案裡,包含分部方法的實作部分,分部方法組合成一個新方法,定義兩個屬性對私有字段進行讀寫,代碼如下:

  1.         //兩個分部方法的實作部分  
  2.         partial void getmsgA(string str)  
  3.         {  
  4.             Console.WriteLine("getmsgA方法所接收的參數是【{0}】,資料類型是【{1}】", str.ToString(), str.GetType());  
  5.         }  
  6.         partial void getmsgB(int i)  
  7.             Console.WriteLine("getmsgB方法所接收的參數是【{0}】,資料類型是【{1}】", i.ToString(), i.GetType());  
  8.         //聲明getmsg方法,調用兩個分部方法  
  9.         internal void getmsg(string str, int i)  
  10.             getmsgA(str);  
  11.             getmsgB(i);  
  12.         //聲明兩個屬性,用于讀取和寫入兩個私有字段  
  13.         internal string Cn  
  14.             get  
  15.             {  
  16.                 return _cn;  
  17.             }  
  18.             set  
  19.                 _cn = value;  
  20.         internal string Am  
  21.                 return _am;  
  22.                 _am = value;  

主程式檔案調用分部類,及分部方法,代碼如下:

  1.     class Program  
  2.         static void Main(string[] args)  
  3.             //建立分部類對象,輸入屬性值  
  4.             Singer sin = new Singer();  
  5.             Console.Write("請輸入sin對象的Cn屬性值:");  
  6.             sin.Cn = Console.ReadLine();  
  7.             Console.Write("請輸入sin對象的Am屬性值:");  
  8.             sin.Am = Console.ReadLine();  
  9.             //輸出  
  10.             Console.WriteLine("/n讀取結果,Cn={0},Am={1}", sin.Cn, sin.Am);  
  11.             //調用getmsg方法  
  12.             sin.getmsg("中美合作", 50);  

運作結果:

C#分部類和分部方法的使用