C 语言的分部类和分部方法,c# partial 分部类和分部方法

本文详细介绍了C#中的分部类和分部方法,包括它们的使用场景、语法特点以及如何合并不同部分的定义。分部类允许在多个文件中拆分大型类的定义,方便代码组织和维护。分部方法则是类内部的一种特殊方法,仅限于类的内部使用,提供了一种灵活的代码组织方式。通过示例代码展示了分部类和分部方法的使用,强调了它们在处理自动生成代码和大型项目时的重要性。
摘要由CSDN通过智能技术生成

一、partial

它是一个关键字修饰符。可以将类或结构、接口或方法的定义拆分到两个或更多个源文件中。 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。修饰符不可用于委托或枚举声明中。

二、分部类

在以下几种情况下需要拆分类定义:

处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理。

使用自动生成的源时,无需重新创建源文件便可将代码添加到类中。 Visual Studio 在创建 Windows 窗体、Web 服务包装器代码等时都使用此方法。 无需修改 Visual Studio 创建的文件,就可创建使用这些类的代码。

简单示例

public partial classTest

{public int Id { get; set; }public string Name { get; set; }public voidShowAge()

{

Console.WriteLine($"My age is {this.Age}");

}

}public partial classTest

{public string Age { get; set; }public voidShowNewAge()

{

ChangeAge();

Console.WriteLine($"My new age is {this.Age}");

}private voidChangeAge()

{this.Age = "20";

}

}classProgram

{static void Main(string[] args)

{var test = new Test() { Id = 1, Name = "1", Age = "11"};

test.ShowAge();

test.ShowNewAge();var info = $"name:{test.Name},age:{test.Age}";

Console.WriteLine(info);

}

}

编译时会对分部类型定义的属性进行合并;将从所有分部类型定义中对以下内容进行合并:XML 注释、接口、泛型类型参数属性、class 特性、成员

public classTestBase { }public interfaceITest

{voidShowAge();

}

[SerializableAttribute]public partial classTest: TestBase

{public int Id { get; set; }public string Name { get; set; }public voidShowAge()

{

Console.WriteLine($"My age is {this.Age}");

}

}

[ObsoleteAttribute]public partial classTest: ITest

{public string Age { get; set; }public voidShowNewAge()

{

ChangeAge();

Console.WriteLine($"My new age is {this.Age}");

}private voidChangeAge()

{this.Age = "20";

}

}

它们等效于:

[SerializableAttribute]

[ObsoleteAttribute]public classTest : TestBase,ITest

{//...

}

如果将任意部分声明为抽象的,则整个类型都被视为抽象的。 如果将任意部分声明为密封的,则整个类型都被视为密封的。

//抽象类示例

public partial classPTest {}public abstract partial classPTest { }classProgram

{static void Main(string[] args)

{//PTest PTest = new PTest();//提示:无法创建抽象类或接口"PTest"的实例

}

}//密封类示例

public partial classSTest { }public sealed partial classSTest { }//public class SubTest: STest { }

三、分部方法

分部类或结构可以包含分部方法。 类的一个部分包含方法的签名。 分部方法声明由两个部分组成:定义和实现。

但是它的限制很多,只能在部分场景下使用。

分部方法声明必须以上下文关键字 partial 开头,并且方法必须返回 void。

分部方法可以有 ref 参数,但不能有 out 参数。

分部方法为隐式 private 方法,因此不能为 virtual 方法。

分部方法不能为 extern 方法,因为主体的存在确定了方法是在定义还是在实现。

分部方法可以有 static 和 unsafe 修饰符。

分部方法可以是泛型的。 约束将放在定义分部方法声明上,但也可以选择重复放在实现声明上。 参数和类型参数名称在实现声明和定义声明中不必相同。

你可以为已定义并实现的分部方法生成委托,但不能为已经定义但未实现的分部方法生成委托。

参考:

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/partial-classes-and-methods

http://www.cnblogs.com/OpenCoder/archive/2009/10/27/1590328.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值