分部方法 partial
當(dāng)有如下這樣類(lèi)似的情況出現(xiàn)的時(shí)候,可以有更好的優(yōu)化方式來(lái)處理,那就是分部方法
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 //如果該方法沒(méi)有實(shí)現(xiàn)的話,生成的IL 代碼也會(huì)有調(diào)用這樣的一個(gè)虛方法 callvirt, 造成性能上不必要的損失 14 OnChangeName(value.ToUpper()); 15 name = value; 16 } 17 } 18 }以上的方式生成如下的IL代碼,這里會(huì)無(wú)謂的去調(diào)用一個(gè)沒(méi)有實(shí)現(xiàn)的方法,沒(méi)有意義的:
?
優(yōu)化方式:分部方法
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());//如果分部方法沒(méi)有實(shí)現(xiàn),那么生成的 IL 中不會(huì)調(diào)用該方法 16 name = value; 17 } 18 } 19 } 20 sealed partial class Part 21 { 22 /// <summary> 23 /// 實(shí)現(xiàn)分部方法 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 }改進(jìn)后的IL 代碼實(shí)現(xiàn)如下:
1. 沒(méi)有實(shí)現(xiàn)分部方法的時(shí)候:
2. 實(shí)現(xiàn)了分部方法的時(shí)候:
?
通過(guò)這樣的方式優(yōu)化后,更加靈活和性能更佳!
關(guān)于分部方法,需要注意的是:
1. 只能在分部類(lèi)或者結(jié)構(gòu)中聲明
2. 分部方法返回值始終是 void, 參數(shù)不能使用 out 修飾符,這是由于改方法的實(shí)現(xiàn)是不確定的,所以不允許有變量接收此返回值,同時(shí)out 參數(shù)也需要在方法內(nèi)部初始化,但是方法不一定存在
3. 分部方法默認(rèn)是private,也只能是private,不需要顯示聲明
......
?
轉(zhuǎn)載于:https://www.cnblogs.com/yougmi/p/5689183.html
總結(jié)
以上是生活随笔為你收集整理的分部方法 partial的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: GHOST重装系统后分区丢失只剩C盘的数
- 下一篇: tar.gz 文件解压 (安装 netb