文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C#3.0亮点 —— 分部方法

C#3.0亮点 —— 分部方法

时间:2011-02-21  来源:Create Chen

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

分部方法的示例

using System;

namespace LinqTest
{
    class Program
    {
        partial class PartialClass
        {
            partial void MissionA(int missionCount);
            int missionCount = 0;
            public void SmallMission()
            {
                Console.WriteLine("Mark before MissionA");
                MissionA(missionCount++);
                Console.WriteLine("MissionA done!");
                //查看此时missionCount的值
                Console.WriteLine("missionCount: " + missionCount);
            }
        }
        static void Main(string[] args)
        {
            PartialClass partialClass = new PartialClass();
            partialClass.SmallMission();
        }
    }
}

        程序结果显示missionCount的值为0, 这是因为这个分部方法没有具体实现的方法体, 编译器编译时没有生成像这个方法参数赋值的IL. 查看程序的IL代码也证实如此, 没有发现有关于MissionA方法的IL代码.

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

public partial class PartialClass
{
    partial void MissionA(int missionCount)
    {
        Console.WriteLine("missionCount in MissionA's Value: "+ missionCount);
    }
}

        编译一下, 查看IL代码, 看到了MissionA的IL代码:

.method private hidebysig instance void  MissionA(int32 missionCount) cil managed
{
  // Code size       22 (0x16)
  .maxstack  8
  IL_0000:  ldstr      "missionCount in MissionA's Value: "
  IL_0005:  ldarg.1
  IL_0006:  box        [mscorlib]System.Int32
  IL_000b:  call       string [mscorlib]System.String::Concat(object,
                                                              object)
  IL_0010:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0015:  ret
} // end of method PartialClass::MissionA

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

为什么要用分部方法

        跟分部方法比较类似的就是类和类中方法的继承, 还有虚拟(abstract)方法. 分部方法存在的目的在于, 编码者有时希望在代码文件中留下一下可以未来有机会再写的方法函数, 以后可以让其它编码者编写这些分部方法的代码, 就算是没有人实现了这些分部方法, 它也不会对性能产生丝毫的影响.

使用分部方法的规则

1. 分部方法只能在分部类中定义和实现

2. 分部方法必须制定partial修改程序

3. 分部方法是私有的, 但是不能制定private修改程序, 否者会产生编译错误

4. 分部方法必须返回void类型

5. 分部方法可以是未实现的方法

6. 分部方法可以是静态的

7. 分部方法可以有参数

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载