自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

.NET Framework擴(kuò)展方法基本常識簡介

開發(fā) 后端
.NET Framework擴(kuò)展方法的類名可以運(yùn)用任意合法的類名來進(jìn)行創(chuàng)建。并且必須要和使用擴(kuò)展方法的代碼存在于同一個命名空間里。

.NET Framework中有很多新奇的東西值得我們?nèi)ド钊氲难芯?。這個世界上總是存在著很多奇妙的東西。然而,在這部分所介紹的擴(kuò)展方法就是其中之一。從字面上看可能讀者很難猜透.NET Framework擴(kuò)展方法是什么意思。然而,看了下面的例子,就會感覺到非常的奇妙。#t#

  1. namespace ExtMethod  
  2. {  
  3. public class Class1  
  4. {  
  5. public String s = "bill";  
  6. }  
  7. public class Class2 : Class1  
  8. {  
  9. }  
  10. public static class AnyClassName  
  11. {  
  12. public static String getName
    (this Class1 class1)  
  13. {  
  14. return class1.s + class1.s;   
  15. }  
  16. }  
  17. public partial class Form1 : Form  
  18. {  
  19. private void button1_Click
    (object sender, EventArgs e)  
  20. {  
  21. Class1 c = new Class1();  
  22. MessageBox.Show(c.getName());   
  23. Class2 c = new Class2();  
  24. MessageBox.Show(c.getName());   
  25. }  
  26. }  

 

 

看到上面的代碼,也許很多人會感到奇怪,在Class1和Class2中并沒有g(shù)etName方法,怎么在調(diào)用時出來個getName方法呢?實(shí)際上,這就是.NET Framework擴(kuò)展方法的用法,從本質(zhì)上說,擴(kuò)展方法就是將靜態(tài)方法(必須聲明成static)插入到某個類和其子類中(也就是說,在這些類中可以使用在外部定義的靜態(tài)方法)。那么要往哪個類中插入呢?這就要在定義靜態(tài)方法時指定了。大家可以看看getName方法的第一個參數(shù),使用了this關(guān)鍵字,這就表明這個方法是一個擴(kuò)展方法,后面的類型就是要插入該方法的類,在本例中是Class1,也就是說在Class1及其子類中都可以使用getName方法。上面的調(diào)用代碼也相當(dāng)于下面的代碼:

 

  1. Class2 c = new Class2();  
  2. MessageBox.Show(AnyClass
    Name.getName(c)); 

 

但使用c.getName可能會更好一些,而且也降低了對靜態(tài)方法所在的類(AnyClassName)的依賴性。

在使用.NET Framework擴(kuò)展方法時應(yīng)注意以下幾點(diǎn):

1. 擴(kuò)展方法所在的類名可以是任意合法的類名。

2. 擴(kuò)展方法所在的類必須和使用擴(kuò)展方法的代碼在同一個命名空間里,否則無法編譯通過。

3. 在本例中,Class1和Class2只能聲明成public,因?yàn)锳nyClassName被聲明為public。如果AnyClassName不加修飾符,Class1和Class2也可以不加修飾符,當(dāng)然,也可以被聲明為public。也就是說,Class1和Class2必須有比AnyClassName具有更強(qiáng)的訪問性。如下面代碼所示:

 

  1. class Class1  
  2. {  
  3. public String s = "bill";  
  4. }  
  5. class Class2 : Class1  
  6. {  
  7. }  
  8. static class AnyClassName   
  9. // 這時如果前面加public是無法編
    譯通過的。  
  10. {  
  11. public static String getName
    (this Class1 class1)  
  12. {  
  13. return class1.s + class1.s;   
  14. }  

4. 如果在Class1或Class2中已經(jīng)有g(shù)etName方法了,那么Class1或Class2中的getName優(yōu)先級更高。也就是說,擴(kuò)展方法是無法覆蓋原類中的同名(參數(shù)名和類型也相同)的方法的。

.NET Framework擴(kuò)展方法尤其在很多類需要同樣的方法,而這些類又無法繼承其它類時特別有用。當(dāng)然,在要對某個類進(jìn)行擴(kuò)展,但我們并沒有源代碼時,擴(kuò)展方法也可以派上用場。

責(zé)任編輯:曹凱 來源: 博客園
相關(guān)推薦

2011-04-07 12:52:05

Oracle數(shù)據(jù)庫

2021-02-10 16:08:43

區(qū)塊鏈數(shù)據(jù)挖礦

2011-07-15 09:20:52

C語言文件操作

2018-07-17 08:46:40

網(wǎng)絡(luò)存儲常識

2011-03-10 13:19:47

Oracle數(shù)據(jù)庫

2009-08-26 14:23:14

C#.Net Fram

2014-08-21 10:12:07

2021-12-14 11:07:55

Log4ShellJNDI漏洞

2010-01-05 16:20:46

.NET Framew

2009-12-30 10:14:41

ADO.NET Ent

2013-02-18 09:50:44

2010-07-21 11:17:30

2009-07-20 16:04:37

ASP.NET fra

2010-01-05 18:49:57

.NET Framew

2010-01-06 18:33:56

.Net Framew

2010-01-05 10:17:35

.NET Framew

2010-01-05 15:27:04

.NET Framew

2010-01-05 15:43:13

.NET Framew

2010-01-05 18:21:33

.NET Framew

2010-01-21 10:48:18

VB.NET擴(kuò)展方法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號