当有如下这样类似的情况出现的时候,可以有更好的优化方式来处理,那就是分部方法

 1     class PartOld
 2     {
 3         string name;
 4
 5         public virtual void OnChangeName(string str)
 6         {
 7         }
 8
 9         public string Name
10         {
11             set
12             {
13                 //如果该方法没有实现的话,生成的IL 代码也会有调用这样的一个虚方法  callvirt, 造成性能上不必要的损失
14                 OnChangeName(value.ToUpper());
15                 name = value;
16             }
17         }
18     }

  以上的方式生成如下的IL代码,这里会无谓的去调用一个没有实现的方法,没有意义的:

优化方式:分部方法

 1     sealed partial class Part
 2     {
 3         string name;
 4
 5         /// <summary>
 6         /// 分部方法
 7         /// </summary>
 8         /// <param name="str"></param>
 9         partial void OnChangeName(string str);
10
11         public string Name
12         {
13             set
14             {
15                 OnChangeName(value.ToUpper());//如果分部方法没有实现,那么生成的 IL 中不会调用该方法
16                 name = value;
17             }
18         }
19     }
20     sealed partial class Part
21     {
22         /// <summary>
23         /// 实现分部方法
24         /// </summary>
25         /// <param name="str"></param>
26         partial void OnChangeName(string str)
27         {
28             if(string.IsNullOrEmpty(str))
29             {
30                 throw new ArgumentException(str);
31             }
32         }
33     }

改进后的IL 代码实现如下:

1. 没有实现分部方法的时候:

2. 实现了分部方法的时候:

  通过这样的方式优化后,更加灵活和性能更佳!

  关于分部方法,需要注意的是:

1. 只能在分部类或者结构中声明

2. 分部方法返回值始终是 void, 参数不能使用 out 修饰符,这是由于改方法的实现是不确定的,所以不允许有变量接收此返回值,同时out 参数也需要在方法内部初始化,但是方法不一定存在

3. 分部方法默认是private,也只能是private,不需要显示声明

......

转载于:https://www.cnblogs.com/yougmi/p/5689183.html

分部方法 partial相关推荐

  1. java 分部类_C#中分部类和分部方法的应用

    分部类(Partial Class)在C#2.0引入,分部方法(Partial Method)在C#3.0引入,这两个语法特性都具有相同的特性:将类(或)方法的代码分散在多个地方. 1.分部类的特性和 ...

  2. 分部类(partial class)和分部方法

    分部类 类的声明可以分割成几个分部类的声明. ●每个分部类的声明都含有一些类成员的声明. ●类的分部类声明可以在同一文件中也可以在不同文件中. ●每个局部声明必须被标为partial class,而不 ...

  3. C 语言的分部类和分部方法,c# partial 分部类和分部方法

    一.partial 它是一个关键字修饰符.可以将类或结构.接口或方法的定义拆分到两个或更多个源文件中. 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来.修饰符不可用于委托或枚 ...

  4. 从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~四 分部方法从另一方面定义了类型的操作规范...

    一 DBContext的构造方法,方法的重载 二 DBContext实例中,表实体对象是怎么被加入的 三 分部类是否破坏了单一职责 四 分部方法从另一方面定义了类型的操作规范 五 LINQ实体类中对属 ...

  5. .NET基础篇——分部类和分部方法

    在面向对象的"封装闭合性"开发原则中,一向提倡的是把独立的功能封装在一个类里面的!但从Visual Studio 2005开发,系统提供了一个分部类的开发方式一直受到争议,很多人认 ...

  6. C# 中的分部类和分部方法

    一.分部类 有创建过Web窗体应用的同学,应该都有 注意到在窗体类的前面默认加上了Partial 的修饰符, 这个就是我们今天要讨论的问题 ,通俗的来讲:Partial 的目的就是把一个类 分成两个或 ...

  7. java 分部类_C#综合揭秘——分部类和分部方法

    在面向对象的"封装闭合性"开发原则中,一向提倡的是把独立的功能封装在一个类里面的!但从Visual Studio 2005开发,系统提供了一个分部类的开发方式一直受到争议,很多人认 ...

  8. MVC5+EF6 入门完整教程6 :分部视图(Partial View)

    本篇我们谈谈分部视图(Partial View). 上篇文章提到过Partial和Action这两个helper, 本篇文章主要就结合这两个helper来讲解分部视图(Partial View)的应用 ...

  9. MVC5+EF6之分部视图(Partial View)

    Partial View指可以应用于View中以作为其中一部分的View的片段(类似于之前的user control), 可以像类一样,编写一次, 然后在其他View中被反复使用. 创建分部视图: ( ...

最新文章

  1. BZOJ4939[Ynoi2016]掉进兔子洞(莫队+bitset)
  2. 爱奇艺个性化推荐排序实践【转】
  3. 页面实现文字滚动效果(跑马灯)
  4. 无法在web服务器上启动调试 您不具备调试此应用程序的权限
  5. Exceptionless 5.0.0本地Docker快速部署介绍
  6. 张建锋:一两年内,阿里巴巴100%的业务都会上公共云
  7. 华为发布企业服务云化转型战略 未来5年投资5亿美金建设服务能力(2017年09月06日)
  8. vim下中文乱码问题解决办法
  9. 【SQL语句】 - Ctrl+3 查询表属性的存储过程 [sp_select_talberowName]
  10. 陈国君Java程序设计基础笔记和习题
  11. 1000个脑筋急转弯
  12. java素数的判断方法_2java判断素数
  13. 缺陷管理工具--mantis使用过程
  14. BI与SaaS碰撞,让数据处理更加轻松(下)
  15. [原创]分析某app直播地址的过程
  16. 【数字信号处理】MATLAB OLA(Overlap-Add)实现变调不变速/变速不变调
  17. 编写简单的在线考试系统
  18. 沈阳建筑学计算机专硕调剂,沈阳建筑大学2020年硕士研究生招生考试网上调剂公告...
  19. Golang - 开篇必须吹牛逼
  20. 零基础转码:CS 61A自学笔记——week 1.1

热门文章

  1. mysql创建索引语句
  2. 事务传播特性和隔离级别
  3. chrome java虚拟机_JATT:谷歌的Java虚拟机自动调整工具
  4. cpu模拟器c语言实现_你写出来的C语言是这样调用硬件的!
  5. Excel中这四个常出错的地方,你一定中过!
  6. SQLServer数据库文件相关知识笔记
  7. Linux实现MYSQl数据库的定时备份
  8. Jquery操作CSS常用方法
  9. 让 步( 写的太好了!)
  10. html 树形图可拖拽,HTML5拖拽API实现vue树形拖拽组件