分部方法 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.pswp.cn/news/286970.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286970.shtml
英文地址,請注明出處:http://en.pswp.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,}) …