将同一个类编写在多个文件中,类的各个文件名不同,类名相同,类名前加partial关键字,这种类型叫分部类。
在分部类中可以建立分部方法,方法名前加关键字partial,分部方法只能将方法分成两部分,即声明部分和实现部分分别位于不同的分部类里。分部方法可以使静态方法,但必须是隐式的私有方法,并且无返回值的方法,因为分部方法时私有方法,所以无法使用virtual修饰符,即不能成为虚方法;分部方法可以有ref参数,但不能有out参数;不允许将委托转换为分部方法。
下例中首先建立项目PartialTypes,主类文件为Program.cs,在项目中添加一个类文件SingerDefine.cs,类名为Singer,再添加另一个类文件SingerImp.cs,类名为Singer。类名前都加partial修饰符
SingerDefine.cs文件里声明两个私有字段和两个分布方法,方法名前加关键字partial,代码如下:
[c-sharp]
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文件里,包含分部方法的实现部分,分部方法组合成一个新方法,定义两个属性对私有字段进行读写,代码如下:
[c-sharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PartialTypes
{
internal partial class Singer
{
//两个分部方法的实现部分
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
{
get
{
return _am;
}
set
{
_am = value;
}
}
}
}
主程序文件调用分部类,及分部方法,代码如下:
[c-sharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PartialTypes
{
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);
}
}
}
运行结果:
标签:
原文地址:https://www.cnblogs.com/wwwbdabc/p/11683349.html