2014-05-08 85 views
0

我有一個幾年前建立的應用程序。我遇到了一段讓我感到困惑的代碼,因爲在整個ASP .Net應用程序中提供的功能非常棒,但我不理解它。也許它的[]拋出我,但我認爲它可能是一些C#代碼轉換爲VB .Net ....不知道,但想知道是否有人明白這一點,如果是的話,他們可以分享它在做什麼瞭解一些代碼

代碼一個NotInheritable類

Public Overloads Function [Get](Of B)() As B 
    Dim myType = GetType(B) 
    Return DirectCast([Get](myType), B) 
End Function 

我的理解是重載函數,但

  1. 爲什麼是[]有沒有和它們意味着什麼?你什麼時候使用它們?如果我刪除它們,我有一個編譯器錯誤。
  2. 在VB中獲取.Net在屬性中使用,所以這是一些快捷方式訪問屬性的地方?或
  3. 我在哪裏可以查看哪種方法的重載?
  4. 我已經使用了類似於List(Of Customer),IQueryable(Customer)的代碼,但是如何以這種方式允許(Of B)?

我已經閱讀了MSDN並進行了研究。唯一想到的就是一些C#語法轉換或一些原始開發人員在創建應用程序時必須使用的舊VB6語法。

感謝您對此的任何澄清。

回答

0

1)括號允許您使用保留字作爲標識符(如c#中的&符號)。

2)這似乎是一個錯誤的命名決定。如果他們想要隱藏現有成員,他們可以使用Shadows關鍵字。

3)您需要檢查繼承層次結構。從最近的家長開始。

4)它在實現中調用Get的不同重載,但是B出於某種原因試圖將它約束到B中。

4

因爲GetVisual Basic Language Keywords的一部分。您需要使用括號來表明您想將它們用作方法/屬性名稱。

下面是從微軟Keywords as Element Names in Code (Visual Basic)的摘錄:

任何程序元件 - 諸如變量,類或構件 - 可具有 相同的名稱爲受限關鍵字。例如,您可以創建一個名爲Loop的變量 。但是,要引用您的版本 - 其中 與限制的Loop關鍵字具有相同的名稱 - 您必須在其之前加上一個完整的限定字符串或將其括入方括號([])中的方框 ,如以下示例所示。