分部方法 partial

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

 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之解决APP奔溃重启导致Fragment白屏问题

1、问题 问题APP奔溃重启导致依附的Fragment白屏问题 2、分析 app奔溃重启Activity肯定更新了,但是依附在Activity里面的fragment有缓存,用的是以前的activity的content,所以获取到是空的, 就会导致fragment依附失败,我们只需要activity不要保存当前fragment就行,直接不…

一文讲透为Power Automate for Desktop (PAD) 实现自定义模块

今天写了一篇长文&#xff0c;《一文讲透为Power Automate for Desktop (PAD) 实现自定义模块 - 附完整代码》&#xff0c;有兴趣的同学点击 “阅读原文” 参考 &#xff0c;文章地址是 https://www.cnblogs.com/chenxizhang/p/16287195.html 微软的PAD是RPA的一种&#xff0…

Linux学习一天一个命令(2)[cd命令]

Linux cd 命令可以说是Linux中最基本的命令语句&#xff0c;其他的命令语句要进行操作&#xff0c;都是建立在使用 cd 命令上的。所以&#xff0c;学习Linux 常用命令&#xff0c;首先就要学好 cd 命令的使用方法技巧。1. 命令格式&#xff1a;cd [目录名]2. 命令功能&#xff…

软件自动化测试的主要目的,功能测试的目的是什么

从功能测试到自动化测试&#xff1f;从常见的自动化测试过程开始&#xff01;在项目的启动阶段功能测试 目的&#xff0c;我们必须阐明为什么要进行自动化&#xff0c;并选择合适的项目进行自动化测试. 1.为什么要进行自动化&#xff1f;在开始自动化测试之前&#xff0c;我们需…

基于Google Earth Pro做数字化,并在ArcGIS中转为Shapefile图层

在精度满足要求的前提下,可以基于Google Earth Pro做数字化,并在ArcGIS中转为Shapefile图层,然后经行投影转换,得到最终的shp数据。主要步骤包括:新建多边形、导出多边形、格式转换,投影转换等。 一. 新建多边形 命名为皇城水库范围,设置线条和面的样式/颜色,并在影像上…

在Esxi 5.1虚机中安装OEM服务器系统

需要在vmx配置文件中&#xff0c;增加一行SMBIOS.reflectHost "TRUE" 本文转自daniel8294 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/acadia627/1260215&#xff0c;如需转载请自行联系原作者

1小时,不会代码的我如何完成 网易云音乐 大作业网页制作?(IVX 第2篇)

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。系列教程将会在…

CentOS5.11安装Mac桌面主题

首先下载Mac4Lin_Install_v1.0.zip 给出个下载地址http://www.kuaipan.cn/file/id_60980504015219653.htm 最好切换到普通用户进行操作&#xff0c;安装过程需要几次确认&#xff0c;推荐n [weilocalhost 桌面]$>>> unzip Mac4Lin_I…

java基础题,错

Which statement declares a variable a which is suitable for referring to an array of 50 string objects?正确答案: B C F 你的答案: D F (错误) char a[][]; String a[]; String[]a; Object a[50]; String a[50]; Object a[]; BCF 在java 中&#xff0c;声明一个数组时…

C# 第一个LINQ 查询

我们将先介绍一个示例&#xff0c;这个示例使用 LINQ 创建了一个查询&#xff0c;以便在一个简单的内存对象数组中查找一些数据&#xff0c;并输出到控制台上。试一试&#xff1a;第一个 LINQ 程序&#xff1a;按照下面的步骤在 Visual Studio 中创建示例&#xff1a; using Sy…

佳鑫诺计算机模拟卷答案,微机原理练习册答案佳鑫诺).docx

PAGE 17计算机系统1&#xff0e;简述名词的概念&#xff1a;微处理器、微型计算机、微型计算机系统。答&#xff1a;(1)微处理器&#xff1a;微处理器(Microprocessor)简称μP或MP&#xff0c;或CPU。CPU是采用大规模和超大规模集成电路技术将算术逻辑部件ALU(Arithmetic Logic…

1小时赚300块,不打代码帮人做个吃鸡网页 [IVX实战第3篇]

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。 实战目录 1…

ArcGIS10.6中,在3D分析工具中创建视线之后,怎么将其删除?

如下图所示&#xff0c; 为3D分析工具条&#xff1a; 在3D分析中创建的线&#xff0c;例如做剖面图是插入的线&#xff0c;该怎样删除呢&#xff1f; 如下图所示。 删除方法是&#xff0c;先使用如下选择工具&#xff0c;然后双击线条&#xff0c;再按delete键。

Android之解决底部4个TextView占比例大小不一致问题

1、问题 底部4个TextView切换多语言了&#xff0c;占据的比例大小不一致。 2、原因 虽然在每个LinearLayout里面写了 android:layout_weight"1" 但是我还加了 android:layout_width"wrap_content" 感觉被自己傻哭了 3、 解决办法 把 android:layo…

RPC的原理总结

一.RPC的引入 早期单机时代&#xff0c;一台电脑上运行多个进程&#xff0c;大家各干各的&#xff0c;老死不相往来。假如A进程需要一个画图的功能&#xff0c;B进程也需要一个画图的功能&#xff0c;程序员就必须为两个进程都写一个画图的功能。这不是整人么&#xff1f;于是就…

怎样实现MathType中带箭头向量的输入

2019独角兽企业重金招聘Python工程师标准>>> 一个向量可以有多种记法&#xff0c;如记作粗体的字母&#xff08;a&#xff09;&#xff0c;或在字母顶上加一小箭头→&#xff0c;或在字母下加波浪线~。如果给定向量的起点&#xff08;A&#xff09;和终点&#xff0…

1小时零基础赚一千,教你完成图书管理系统,不用打代码绝对学得会![完整全站教学 IVX 实战第四篇]

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。 必看提示 项…

在河北当中学老师用不用考计算机,河北省教育厅出台新方案 师范生当教师也需考证...

保存到相册师范生当教师也需考证啦省教育厅公布方案&#xff0c;暑期后入学师范生要当老师都得拿教师资格证今年暑期后入学的师范类专业学生&#xff0c;申请教师资格需参加统一的教师资格考试。昨日&#xff0c;省教育厅官网公布《河北省中小学和幼儿园教师资格考试改革试点工…

案例:无人船测量点位数据+ArcGIS 10.6软件生成三维水下地形的两种方法

通常情况下,采用无人船进行水下地形测量,得到的是离散的,具有点号、日期、时间、东坐标(E)、北坐标(N)、水面高程、水下高程和水深等信息的点位数据,该数据一般由航带点位数据加水岸线组成,如下图所示: 原始点位数据格式如下: 下面讲解在ArcGIS软件中生成三维水下地…

Flutter之Align

1、Align介绍 Align的作为一个参数&#xff0c;设置子child的对齐方式&#xff0c;比如居中&#xff0c;左上&#xff0c;右下等多个对齐方向 2、部分源码和功能 const Align({Key key,this.alignment Alignment.center,this.widthFactor,this.heightFactor,Widget child,}) …