微软在C#2.0中引入了局部类的概念,局部类就是把一个类分别在多个带partial关键字的多个类中实现。这在有些类一部分是代码生成工具生成一部分是开发人员手动实现的类提供了方便。在即将推出的3.0中微软对这一特性进行了扩展-引入了局部方法的概念。
局部方法允许在类的一部分定义一个方法或一个事件,而在类的另一部分实现这个方法或事件,在定义这个方法或事件之后,在类的另一部分可以实现也可以不实现。如果定义了局部方法而没有在类的另一部分实现。编译器编译时将删除局部方法的定义和所有对这个方法调用的代码。可以用反编译软件打开生成的dll确认。所以在手工写的代码中可以保留一些方法的声明,而不必关心在自动生成的类中是否对这些方法进行实现。
下面介绍一下局部方法的规则:
1. 局部方法必须用partial关键字作为修饰符,返回类型必须是void。
2. 局部方法可以有ref参数,但不能有out参数。
3. 局部方法是private的,所以不能用virtual修饰。
4. 局部方法不能是extern的。
5. 局部方法可以有static和unsafe修饰符。
6. 在声明中的参数的名称不必和局部方法的定义时的一样,但类型必须匹配。
7. 不能用delegate。
下面简单看一个代码实例:
看起来局部方法的定义有些像接口或抽象类。前面说过,局部方法的实现是可选择的。把上面代码中的13~16行注释掉,仍然可以编译和运行,只不过运行时第10行已经不起作用了。
局部方法允许在类的一部分定义一个方法或一个事件,而在类的另一部分实现这个方法或事件,在定义这个方法或事件之后,在类的另一部分可以实现也可以不实现。如果定义了局部方法而没有在类的另一部分实现。编译器编译时将删除局部方法的定义和所有对这个方法调用的代码。可以用反编译软件打开生成的dll确认。所以在手工写的代码中可以保留一些方法的声明,而不必关心在自动生成的类中是否对这些方法进行实现。
下面介绍一下局部方法的规则:
1. 局部方法必须用partial关键字作为修饰符,返回类型必须是void。
2. 局部方法可以有ref参数,但不能有out参数。
3. 局部方法是private的,所以不能用virtual修饰。
4. 局部方法不能是extern的。
5. 局部方法可以有static和unsafe修饰符。
6. 在声明中的参数的名称不必和局部方法的定义时的一样,但类型必须匹配。
7. 不能用delegate。
下面简单看一个代码实例:
1 partial class Program
2 {
3 static partial void MyPartialMethod(int i);
4 }
5
6 partial class Program
7 {
8 static void Main(string[] args)
9 {
10 MyPartialMethod(10);
11 }
12
13 static partial void MyPartialMethod(int i)
14 {
15 Console.WriteLine("In partial method: {0}", i);
16 }
17
18 }
2 {
3 static partial void MyPartialMethod(int i);
4 }
5
6 partial class Program
7 {
8 static void Main(string[] args)
9 {
10 MyPartialMethod(10);
11 }
12
13 static partial void MyPartialMethod(int i)
14 {
15 Console.WriteLine("In partial method: {0}", i);
16 }
17
18 }
看起来局部方法的定义有些像接口或抽象类。前面说过,局部方法的实现是可选择的。把上面代码中的13~16行注释掉,仍然可以编译和运行,只不过运行时第10行已经不起作用了。