偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

.NET Framework擴(kuò)展方法基本常識(shí)簡(jiǎn)介

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

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

 

 

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

 

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

 

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

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

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

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

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

 

  1. class Class1  
  2. {  
  3. public String s = "bill";  
  4. }  
  5. class Class2 : Class1  
  6. {  
  7. }  
  8. static class AnyClassName   
  9. // 這時(shí)如果前面加public是無(wú)法編
    譯通過(guò)的。  
  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)先級(jí)更高。也就是說(shuō),擴(kuò)展方法是無(wú)法覆蓋原類(lèi)中的同名(參數(shù)名和類(lèi)型也相同)的方法的。

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

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

2011-04-07 12:52:05

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

2021-02-10 16:08:43

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

2018-07-17 08:46:40

網(wǎng)絡(luò)存儲(chǔ)常識(shí)

2011-07-15 09:20:52

C語(yǔ)言文件操作

2011-03-10 13:19:47

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

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-05 10:17:35

.NET Framew

2010-01-06 18:33:56

.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ù)棧公眾號(hào)