分部方法 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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

C# 第一个LINQ 查询

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

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键。

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,}) …

聊一聊容器生命周期

容器生命周期上图已经非常清晰地阐述了容器的生命周期&#xff0c;接下来就简单介绍下相关操作指令。创建容器docker create --name <container-name> <image-name>创建容器并等待运行。运行容器docker run -d --name <container-name> <image-name>其…

Android SQLite (一) 数据库简介

大家好&#xff0c;今天来介绍一下SQLite的相关知识&#xff0c;并结合Java实现对SQLite数据库的操作。 SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准&#xff0c;并且可以在所有主要的操作系统上运行。 SQLite由以下几个部分组成&#…

租号显示服务器爆满怎么办,租号器环境异常怎么解决

玩网络游戏出现环境异常&#xff0c;怎么办…网络连接上但上不了网的原因以及相应的解决办法。一、检查是否密码错误输入连接密码的时候&#xff0c;如果密码比较长有可能会输错密码&#xff0c;所以建议大家再输入一次密码。如果有可能&#xff0c;直接使用复制粘贴的方式输入…

零基础“复刻”经典飞机大战小程序游戏【一篇文使用 IVX 轻松实战5】

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

【无人机组装与调试】第一章 概述

【无人机组装与调试】系列课程全集&#xff1a; 第一章 概述 第二章 关于新西达30A电调说明书的问题 第三章 舵机安装与调整 第四章 F450四轴装机实例-选择机型、需要的器材工具材料 第五章 无人机遥控器 第六章 电调、电池、电机 1.1 什么是无人机&#xff1f; 无人驾驶飞机是…

Flutter之Center

1、Center介绍 Center将子控件放在其内部中心&#xff0c;里面只能放一个child&#xff0c;但是child里面可以放Container Center继承勒Align&#xff0c;然后Align默认是center. 2、测试代码 测试1、 overrideWidget build(BuildContext context) {return MaterialApp(title…

【Cisco Packet Tracer】综合实践题-校园网仿真

本题的目的&#xff1a; 理论与实践结合&#xff1a;Cisco Packet Tracer是一个网络模拟软件&#xff0c;通过模拟真实的网络环境&#xff0c;可以让学生在实际操作中加深对理论知识的理解和掌握。问题解决能力&#xff1a;综合实验题可以考察学生分析和解决问题的能力。在实验…