控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

C#3.0亮点 —— 分部方法

作者:佚名 出处:互联网 2011年02月22日 阅读:

C#3.0亮点 —— 分部方法
 
        分部方法那些方法原型或定义都是在分部类的声明中指定, 但是没有在该分部类的相同声明中提供方法的具体实现方法. 一般情况下, 在相同分部类中的其它任何声明中都没有对这个方法的任何实现.

        如果在相同分部类的任何其它声明中都美誉这个方法的实现, 则编译器将不会为这个方法的声明, 对该方法的调用, 或者为传递到该方法参数的赋值而生成IL代码. 就好像这个方法从来都没有存在过一样.

分部方法的示例
00 using System; 
01   
02 namespace LinqTest 
03 { 
04     class Program 
05     { 
06         partial class PartialClass 
07         { 
08             partial void MissionA(int missionCount); 
09             int missionCount = 0; 
10             public void SmallMission() 
11             { 
12                 Console.WriteLine("Mark before MissionA"); 
13                 MissionA(missionCount++); 
14                 Console.WriteLine("MissionA done!"); 
15                 //查看此时missionCount的值 
16                 Console.WriteLine("missionCount: " + missionCount); 
17             } 
18         } 
19         static void Main(string[] args) 
20         { 
21             PartialClass partialClass = new PartialClass(); 
22             partialClass.SmallMission(); 
23         } 
24     } 
25 }
        程序结果显示missionCount的值为0, 这是因为这个分部方法没有具体实现的方法体, 编译器编译时没有生成像这个方法参数赋值的IL. 查看程序的IL代码也证实如此, 没有发现有关于MissionA方法的IL代码.

        如果改一下, 将那个partial方法实现一下, 只需在代码中加上:

0 public partial class PartialClass 
1 { 
2     partial void MissionA(int missionCount) 
3     { 
4         Console.WriteLine("missionCount in MissionA's Value: "+ missionCount); 
5     } 
6 }
        编译一下, 查看IL代码, 看到了MissionA的IL代码:
00 .method private hidebysig instance void  MissionA(int32 missionCount) cil managed 
01 { 
02   // Code size       22 (0x16) 
03   .maxstack  8 
04   IL_0000:  ldstr      "missionCount in MissionA's Value: "
05   IL_0005:  ldarg.1 
06   IL_0006:  box        [mscorlib]System.Int32 
07   IL_000b:  call       string [mscorlib]System.String::Concat(object, 
08                                                               object) 
09   IL_0010:  call       void [mscorlib]System.Console::WriteLine(string) 
10   IL_0015:  ret 
11 } // end of method PartialClass::MissionA

        运行之后可以发现, missionCount这个时候打印出来, 就是1了.

 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统