3.6 局部方法
在C# 2.0中就已经引入了局部类的概念,局部类就是把一个类分别在多个带partial关键字的多个类中实现,这为一部分由代码生成工具生成、另一部分是由开发人员手动实现的类提供了方便。从3.0以后的版本中微软对这一特性进行了扩展,引入了局部方法的概念。
局部方法允许在类的一部分定义一个方法或一个事件,而在类的另一部分实现这个方法或事件,在定义这个方法或事件后,在类的另一部分可以实现也可以不实现。如果定义了局部方法而没有在类的另一部分实现。编译器编译时将删除局部方法的定义和所有对这个方法调用的代码。可以用反编译软件打开生成的dll确认。所以,在手工写的代码中可以保留一些方法的声明,而不必关心在自动生成的类中是否对这些方法进行实现。在新版本的编译器中,对于局部方法才用了更加完善的机制。
3.6.1 局部方法的规则
在新版的编译器中规定局部方法的规则。
(1)局部方法必须用partial关键字作为修饰符,返回类型必须是void。
(2)局部方法可以有ref参数,但不能有out参数。
(3)局部方法是private的,所以不能用virtual修饰。
(4)局部方法不能是extern的。
(5)局部方法可以有static和unsafe修饰符。
(6)在声明中参数的名称不必和局部方法定义时相同,但类型必须匹配。
(7)不能用delegate。
下面代码可以更好地理解局部方法。
在代码中为学生类写了一个添加方法,该方法中在学生名称前面添加了一个字符串。
3.6.2 使用局部方法
在下面的代码中调用了局部方法,调用后输出学生姓名,代码如下。
输出结果如图3-20所示。在返回的学生名册前面添加了新的字符串。
图3-20 调用局部方法后的输出结果