日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
VB.NET類型提升失效問題總結(jié)

VB.NET是一款運(yùn)行機(jī)制和Java類似的編程語言。其具有面向?qū)ο筇匦裕軌蛑С执a托管,而且界面簡(jiǎn)單,結(jié)構(gòu)穩(wěn)定,為開發(fā)人員帶來了極大的好處。在這里我們會(huì)通過對(duì)VB.NET類型提升的一些相關(guān)問題的解疑,來對(duì)這門語言進(jìn)行深入的研究。

成都創(chuàng)新互聯(lián)為您提適合企業(yè)的網(wǎng)站設(shè)計(jì)?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強(qiáng)的網(wǎng)絡(luò)競(jìng)爭(zhēng)力!結(jié)合企業(yè)自身,進(jìn)行網(wǎng)站設(shè)計(jì)及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到成都做網(wǎng)站、成都網(wǎng)站建設(shè), 我們的網(wǎng)頁設(shè)計(jì)師為您提供的解決方案。

在模塊中聲明編程元素時(shí),VB.NET會(huì)將其范圍提升到包含該模塊的命名空間。這稱為VB.NET類型提升。

下面的示例演示某個(gè)模塊和該模塊的兩個(gè)成員的主干定義。

 
 
 
  1. Namespace projNamespace  
  2. Module projModule  
  3. Public Enum basicEnum As Integer  
  4. one = 1 
  5. two = 2 
  6. End Enum  
  7. Public Class innerClass  
  8. Public Sub numberSub(ByVal firstArg As Integer)  
  9. End Sub  
  10. End Class  
  11. End Module  
  12. End Namespace 

在 projModule 中的模塊級(jí)別上聲明的編程元素將被提升到 projNamespace。在前面的示例中,提升了 basicEnum 和 innerClass,但是沒有提升 numberSub,因?yàn)樗皇窃谀K級(jí)別上聲明的。

VB.NET類型提升的結(jié)果

類型提升的結(jié)果是一個(gè)限定字符串不需要包括模塊名稱。下面的示例對(duì)前面示例中的過程發(fā)出兩個(gè)調(diào)用。

 
 
 
  1. Sub usePromotion()  
  2. projNamespace.projModule.innerClass.numberSub
    (projNamespace.projModule.basicEnum.one)  
  3. projNamespace.innerClass.numberSub(projNamespace.basicEnum.two)  
  4. End Sub 

在前面的示例中,***個(gè)調(diào)用使用完全限定字符串。但由于進(jìn)行了類型提升,因此這不是必需的。第二個(gè)調(diào)用也訪問模塊的成員,但在限定字符串中不包括 projModule。

VB.NET類型提升的失效

如果命名空間中的成員與某個(gè)模塊成員同名,則對(duì)該模塊成員的類型提升將會(huì)失效。下面的示例演示同一命名空間中枚舉和模塊的主干定義。

 
 
 
  1. Namespace thisNamespace  
  2. Public Enum abc  
  3. first = 1 
  4. second  
  5. End Enum  
  6. Module thisModule  
  7. Public Class abc  
  8. Public Sub abcSub()  
  9. End Sub  
  10. End Class  
  11. Public Class xyz  
  12. Public Sub xyzSub()  
  13. End Sub  
  14. End Class  
  15. End Module  
  16. End Namespace 

在前面的示例中,Visual Basic 無法將類 abc 提升到 thisNameSpace,因?yàn)樵诿臻g級(jí)別上已存在同名的枚舉。若要訪問 abcSub,必須使用完全限定字符串 thisNamespace.thisModule.abc.abcSub。但是,仍會(huì)提升 xyz 類,您可以使用較短的限定字符串 thisNamespace.xyz.xyzSub 來訪問 xyzSub。

分部VB.NET類型提升的失效

如果模塊內(nèi)的類或結(jié)構(gòu)使用分部 (Visual Basic) 關(guān)鍵字,則對(duì)該類或結(jié)構(gòu)的類型提升會(huì)自動(dòng)失效,無論命名空間是否具有同名的成員。模塊中的其他元素仍然符合類型提升的條件。

結(jié)果。 分部定義的類型提升失效可能導(dǎo)致意外的結(jié)果,甚至導(dǎo)致編譯器錯(cuò)誤。下面的示例演示類的主干分部定義,其中一個(gè)定義位于模塊內(nèi)。

 
 
 
  1. Namespace sampleNamespace  
  2. Public Partial Class sampleClass  
  3. Public Sub sub1()  
  4. End Sub  
  5. End Class  
  6. Module sampleModule  
  7. Public Partial Class sampleClass  
  8. Public Sub sub2()  
  9. End Sub  
  10. End Class  
  11. End Module  
  12. End Namespace 

在前面的示例中,開發(fā)人員可能期望編譯器合并 sampleClass 的兩個(gè)分部定義。但是,編譯器不考慮 sampleModule 內(nèi)分部定義的提升。因此,它嘗試編譯兩個(gè)名稱均為 sampleClass 但具有不同限定路徑的不同類。#t#

只有在兩個(gè)分部定義的完全限定路徑相同時(shí),編譯器才會(huì)對(duì)這兩個(gè)分部定義進(jìn)行合并。

建議

下面的建議提供了良好的編程做法。

***名稱。 當(dāng)您可以完全控制編程元素的命名時(shí),在所有位置使用***名稱始終是一個(gè)好辦法。相同的名稱需要額外的限定,并可能使代碼難以閱讀,還可能導(dǎo)致難以發(fā)現(xiàn)的錯(cuò)誤和意外的結(jié)果。

完全限定。 當(dāng)您在同一命名空間中使用模塊和其他元素時(shí),最安全的方法是對(duì)所有編程元素始終使用完全限定。如果某個(gè)模塊成員的VB.NET類型提升失效,而您沒有完全限定該成員,則無意中可能會(huì)訪問另一個(gè)編程元素。


分享題目:VB.NET類型提升失效問題總結(jié)
標(biāo)題URL:http://www.5511xx.com/article/dpdsesj.html