首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> C# >> 正文

C# 3.0中的分部方法

  分部方法的语法

  在看C#语言的What's New时,突然发现新特性列表的最后,多出了一个“Partial Method Definitions ”,但并不像其他新特性一样有超链接链接到其说明。上网搜索了一下,关于分部类型的信息非常少。尤其是中文信息,只有CSDN的 周融 在其《C# 3.5 语言在 Visual Studio Orcas Beta 1 上的新增功能(二) 》一文的最后提到了这个分部方法,但没有进一步说明。英文技术文章中,倒是有两篇不错的:http: //blogs.msdn.com/wesdyer/archive/2007/05/23/in-case-you-haven-t-heard.aspx 和 http://community.bartdesmet.net/blogs/bart/archive/2007/07/28/c-3-0-partial -methods-what-why-and-how.aspx.

  又仔细看了一下MSDN Library for Visual Studio 2008 Beta 2,终于对这个语言特性有所了解,在这里介绍一下,希望对大家有所帮助。

  分部方法的定义和分部类型类似,只需在方法定义前添加partial关键字。但分部方法只能拆分成两个部分——一部分是定义声明(Definition Declaration),另一部分是实现声明(Implement Declaration)。其中定义声明看上去和抽象方法类似:

  partial class CA

  {

  // ……

  private void partial M(); // 定义声明|

  而实现声明看上去和普通方法类似:

  private void partial M() // 实现声明

  {

  // 方法体

  }

  在调用分部方法时,和调用其他方法一样:

  CA a = new CA();

  a.M();

  只是,如果只有定义声明而没有编写实现声明,则编译器不会发射(Emit)该方法和调用该方法的语句的元数据与IL代码。换言之,如果没有编写实现声明,则编译得到的程序集中,CA类型里并没有M这个方法。

  使用分部方法的注意事项

  分部方法的语法非常简单,但有一些事项要注意。

  如果没有写实现声明,则不会发射方法调用代码,也不会对参数进行求值。因此,对于下面的例子:

class CA  
{
partial void M(int i);

static void Main()
{
CA a = new CA();
int i = 0;
a.M(i++);
}
}

  分部方法M只有定义声明,没有实现声明,因此也不会发射调用该方法的代码:a.M(i++),因此也不会对i++进行求值。所以最终i的值依然是0.但如果为M编写了实现声明,则a.M(i++)的代码会被编译到最终的程序集中,同时参数也被求值,i的值将被变为1.

  分部方法只能出现在分部类中。

  分部方法必须是私有(private)的,并且返回值类型必须是void.

  分部方法可以带有参数,并且其参数可以带有this、params和ref修饰符,但不能带有out修饰符。

  分部方法不可以是虚拟(virtual)的。

  分部方法不可以是外部(extern)的。

  分部方法可以是静态(static)的,也可以是不安全(unsafe)的。

  分部方法可以是泛型方法,泛型约束必须放置在定义声明中,但也可以在事先声明中重复说明。在定义声明和实现声明中,类型参数和类型参数的名字不一定必须一致。

[1] [2] [3] 下一页

【责编:Kittoy】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航