2013-01-14 116 views
1

請看看下面的功能:協變返回類型和靜態類

Public Function Test(ByVal i As Integer) As Animal 
     If i = 1 Then 
      Return New Dog 
     Else 
      Return New Cat 
     End If 

    End Function 

狗或貓被取決於整數的值是否爲1或不函數返回。如果狗和貓是靜態類,這是如何處理的?即您無法創建靜態類的實例。我今天下午在MSDN網站上閱讀了一些關於靜態類的網頁,但是我還沒有找到對我的具體問題的答案。

回答

0

術語「靜態類」是一個C#的概念,它不存在VB.NET。所以,不,這是不可能的。

在C#中也是不可能的,靜態類只能從Object派生。最接近的靜態類的VB.NET等價物是Module。相當不合適。

您當然可以返回一個類的靜態實例。如果要在類中聲明該變量,請在Module中聲明變量或使用Shared關鍵字。

Class Example 
    Private Shared theDog As Dog 
    Private Shared theCat As Cat 

    Public Shared Function Test(ByVal i As Integer) As Animal 
     If i = 1 Then Return theDog Else Return theCat 
    End Function 
End Class 
+0

謝謝。在我的情況下,函數不能是靜態的,因爲我必須訪問並填充一個非靜態的實例變量(我意識到我沒有在問題中提到這一點)。抱歉。 – w0051977

+0

嗯,當然我選擇了Shared,因爲函數沒有使用該類的任何實例成員。隨意刪除它。奇怪的評論順便說一句,你確定你知道你在問什麼? –

0

如果Dog和Cat是靜態類,該怎麼辦?

這不是。你不能「返回一個靜態類」 - 你需要總是返回一個對象。你可以使用使用一個類的靜態/共享方法來生成或操作該對象。例如,如果你的類型有一個工廠創建方法,你可以這樣做:

Public Function Test(ByVal i As Integer) As Animal 
    If i = 1 Then 
     Return Dog.Create(i) 
    Else 
     Return Cat.Create(i) 
    End If 

End Function