av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

VB.NET類(lèi)型提升失效問(wèn)題總結(jié)

VB.NET是一款運(yùn)行機(jī)制和Java類(lèi)似的編程語(yǔ)言。其具有面向?qū)ο筇匦裕軌蛑С执a托管,而且界面簡(jiǎn)單,結(jié)構(gòu)穩(wěn)定,為開(kāi)發(fā)人員帶來(lái)了極大的好處。在這里我們會(huì)通過(guò)對(duì)VB.NET類(lèi)型提升的一些相關(guān)問(wèn)題的解疑,來(lái)對(duì)這門(mén)語(yǔ)言進(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)頁(yè)設(shè)計(jì)師為您提供的解決方案。

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

下面的示例演示某個(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,但是沒(méi)有提升 numberSub,因?yàn)樗皇窃谀K級(jí)別上聲明的。

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

類(lèi)型提升的結(jié)果是一個(gè)限定字符串不需要包括模塊名稱(chēng)。下面的示例對(duì)前面示例中的過(guò)程發(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)行了類(lèi)型提升,因此這不是必需的。第二個(gè)調(diào)用也訪問(wèn)模塊的成員,但在限定字符串中不包括 projModule。

VB.NET類(lèi)型提升的失效

如果命名空間中的成員與某個(gè)模塊成員同名,則對(duì)該模塊成員的類(lèi)型提升將會(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 無(wú)法將類(lèi) abc 提升到 thisNameSpace,因?yàn)樵诿臻g級(jí)別上已存在同名的枚舉。若要訪問(wèn) abcSub,必須使用完全限定字符串 thisNamespace.thisModule.abc.abcSub。但是,仍會(huì)提升 xyz 類(lèi),您可以使用較短的限定字符串 thisNamespace.xyz.xyzSub 來(lái)訪問(wèn) xyzSub。

分部VB.NET類(lèi)型提升的失效

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

結(jié)果。 分部定義的類(lèi)型提升失效可能導(dǎo)致意外的結(jié)果,甚至導(dǎo)致編譯器錯(cuò)誤。下面的示例演示類(lèi)的主干分部定義,其中一個(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 

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

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

建議

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

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

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


網(wǎng)站欄目:VB.NET類(lèi)型提升失效問(wèn)題總結(jié)
標(biāo)題URL:http://uogjgqi.cn/article/dpdsesj.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流