日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分部方法 partial

發布時間:2023/12/9 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分部方法 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

總結

以上是生活随笔為你收集整理的分部方法 partial的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。