成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

VB.NET類型提升失效問題總結

開發 后端
VB.NET類型提升之后,可以實現限定字符串而不需要包括模塊名稱。不過,在進行提升的過程中通常會出現失效的狀態,在這里就對此進行了一個詳細的介紹。

VB.NET是一款運行機制和Java類似的編程語言。其具有面向對象特性,能夠支持代碼托管,而且界面簡單,結構穩定,為開發人員帶來了極大的好處。在這里我們會通過對VB.NET類型提升的一些相關問題的解疑,來對這門語言進行深入的研究。

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

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

  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 中的模塊級別上聲明的編程元素將被提升到 projNamespace。在前面的示例中,提升了 basicEnum 和 innerClass,但是沒有提升 numberSub,因為它不是在模塊級別上聲明的。

VB.NET類型提升的結果

類型提升的結果是一個限定字符串不需要包括模塊名稱。下面的示例對前面示例中的過程發出兩個調用。

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

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

VB.NET類型提升的失效

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

  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,因為在命名空間級別上已存在同名的枚舉。若要訪問 abcSub,必須使用完全限定字符串 thisNamespace.thisModule.abc.abcSub。但是,仍會提升 xyz 類,您可以使用較短的限定字符串 thisNamespace.xyz.xyzSub 來訪問 xyzSub。

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

如果模塊內的類或結構使用分部 (Visual Basic) 關鍵字,則對該類或結構的類型提升會自動失效,無論命名空間是否具有同名的成員。模塊中的其他元素仍然符合類型提升的條件。

結果。 分部定義的類型提升失效可能導致意外的結果,甚至導致編譯器錯誤。下面的示例演示類的主干分部定義,其中一個定義位于模塊內。

  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 

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

只有在兩個分部定義的完全限定路徑相同時,編譯器才會對這兩個分部定義進行合并。

建議

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

***名稱。 當您可以完全控制編程元素的命名時,在所有位置使用***名稱始終是一個好辦法。相同的名稱需要額外的限定,并可能使代碼難以閱讀,還可能導致難以發現的錯誤和意外的結果。

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

責任編輯:曹凱 來源: wewill.cn
相關推薦

2009-10-27 14:32:45

VB.NET類型級命名

2009-11-10 16:37:48

VB.NET ANY

2010-01-07 14:10:41

VB.NET數據類型

2009-11-10 13:08:13

VB.NET編程技巧

2009-11-02 13:14:18

VB.NET函數

2010-01-20 17:54:13

VB.NET特殊字符

2010-01-12 16:39:26

VB.NET數據綁定

2009-10-28 09:21:19

VB.NET技術

2009-11-03 10:51:33

VB.NET共享

2010-01-15 10:47:15

VB.NET命名空間

2009-10-13 14:38:10

VB.NET訪問類型

2009-10-09 17:40:38

VB.Net問題集

2009-10-27 09:45:03

VB.NET數組

2010-01-12 18:00:50

VB.NET界面

2010-01-21 14:49:44

VB.NET操作Wor

2009-10-23 09:26:09

VB.NET多線程

2009-11-10 15:30:46

VB.NET編程原則

2009-10-15 17:57:33

VB.NET List

2009-10-26 16:53:00

VB.NET常用代碼

2009-10-15 13:06:12

VB.NET Shar
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91在线影院 | 精品久久久久久久 | 一区二区视频在线观看 | 亚洲成av人影片在线观看 | 午夜精品福利视频 | 玖玖玖av| 91福利电影在线观看 | 欧美精品一区二区免费 | 羞羞网站在线观看 | 天堂va在线 | 一级片免费观看 | 亚洲国产成人精品女人久久久 | 一区精品在线观看 | av网站免费在线观看 | 亚洲a视频 | 亚洲福利av| 91在线免费观看网站 | 久久久精品一区 | 成人精品一区二区三区 | 日韩激情网 | 操射视频| 欧美综合久久 | 一区二区三区四区毛片 | 中文字幕在线第一页 | 一区二区三区四区不卡视频 | 国产一级大片 | 成人精品视频在线观看 | 国产精品一二三区在线观看 | 亚洲a视 | 91精品国产欧美一区二区成人 | 美女爽到呻吟久久久久 | 久久男人 | 亚洲成人午夜电影 | 国产精品日韩欧美一区二区 | 久久国产精品免费 | 天堂网av在线 | 成人a免费| 91视在线国内在线播放酒店 | 国产一区二区三区四区五区加勒比 | 欧美精品成人 | 欧美一区二区在线观看视频 |