查看: 3323|回復: 0

[ASP.NET教程] c# 如果一個對象的值為null,那么它調用擴展方法時為甚么不報錯

發表于 2018-4-30 09:02:57

如果一個對象的值為null,那么它調用擴展方法時會報錯嗎?

  1. Person p = null ;
  2. p.ExtendMethod();
復制代碼

上述代碼出現的情況不會報錯,剛開始遇到這種情況時很納悶,就去問了大牛。大牛解釋如下:

擴展函數其實只是為了讓代碼更具有可讀性, 但最終在clr中會翻譯成標準的靜態函數調用,

比如:  

  1. public static void ExtMethod(this string str)
  2. {
  3. if(!string.IsNullOrEmpty(str))
  4. {
  5. //對str處理
  6. }
  7. }
復制代碼

調用 "string".ExtMethod()最終會翻譯成ExtMethod("string"); 所以即使為null自然也不會報錯

null 為什么點不出那個擴展函數?


  通過null獲取它自己的方法如下:

  

  這樣試試 ((string)null).ExtMethod() 肯定能點出來

  

  關鍵是使用擴展函數要看對應的數據類型。



回復

使用道具 舉報