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.   
  6. namespace PartialTypes  
  7. {  
  8.     internal partial class Singer  
  9.     {  
  10.         //声明两个私有字段  
  11.         private string _cn;  
  12.         private string _am;  
  13.   
  14.         //声明两个分布方法  
  15.         partial void getmsgA(string str);  
  16.         partial void getmsgB(int i);  
  17.   
  18.     }  
  19. }  

SingerImp.cs文件里,包含分部方法的实现部分,分部方法组合成一个新方法,定义两个属性对私有字段进行读写,代码如下:

[c-sharp] view plaincopy
 
 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace PartialTypes  
  7. {  
  8.     internal partial class Singer  
  9.     {  
  10.         //两个分部方法的实现部分  
  11.         partial void getmsgA(string str)  
  12.         {  
  13.             Console.WriteLine("getmsgA方法所接收的参数是【{0}】,数据类型是【{1}】", str.ToString(), str.GetType());  
  14.         }  
  15.         partial void getmsgB(int i)  
  16.         {  
  17.             Console.WriteLine("getmsgB方法所接收的参数是【{0}】,数据类型是【{1}】", i.ToString(), i.GetType());  
  18.         }  
  19.   
  20.         //声明getmsg方法,调用两个分部方法  
  21.         internal void getmsg(string str, int i)  
  22.         {  
  23.             getmsgA(str);  
  24.             getmsgB(i);  
  25.         }  
  26.   
  27.         //声明两个属性,用于读取和写入两个私有字段  
  28.         internal string Cn  
  29.         {  
  30.             get  
  31.             {  
  32.                 return _cn;  
  33.             }  
  34.             set  
  35.             {  
  36.                 _cn = value;  
  37.             }  
  38.         }  
  39.         internal string Am  
  40.         {  
  41.             get  
  42.             {  
  43.                 return _am;  
  44.             }  
  45.             set  
  46.             {  
  47.                 _am = value;  
  48.             }  
  49.         }  
  50.     }  
  51. }  

主程序文件调用分部类,及分部方法,代码如下:

[c-sharp] view plaincopy
 
 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace PartialTypes  
  7. {  
  8.     class Program  
  9.     {  
  10.         static void Main(string[] args)  
  11.         {  
  12.             //创建分部类对象,输入属性值  
  13.             Singer sin = new Singer();  
  14.             Console.Write("请输入sin对象的Cn属性值:");  
  15.             sin.Cn = Console.ReadLine();  
  16.   
  17.             Console.Write("请输入sin对象的Am属性值:");  
  18.             sin.Am = Console.ReadLine();  
  19.   
  20.             //输出  
  21.             Console.WriteLine("/n读取结果,Cn={0},Am={1}", sin.Cn, sin.Am);  
  22.   
  23.             //调用getmsg方法  
  24.             sin.getmsg("中美合作", 50);  
  25.   
  26.         }  
  27.     }  
  28. }  

运行结果:

原文地址:https://www.cnblogs.com/wwwbdabc/p/11683349.html