我創建了一個虛類
Public MustInherit Class A
...
End Class
然后創建了兩個類繼承它
Public MustInherit Class B : Inherits A
Public AA As Single
End Class
Public MustInherit Class C : Inherits A
Public BB As Single
End Class
現在我想在主程式中使用Select Case陳述句在主程式中創建一個物件Obj
Sub Main()
Select i
Case 1
Dim Obj As New B
Case 2
Dim Obj As New B
End Select
Obj.AA=123
Obj.BB=234
End Sub
由于在主程式中我發確認創建的物件屬于哪個類,因此上面的編碼無法實作,不知有沒有好辦法僅創建一個物件Obj,在特定條件下實作為B類的功能或C類的功能。
我不想同時創建B類和C類的物件,因為在樣可以節省記憶體空間,我知道我理解的對不對。
謝謝指教。
uj5u.com熱心網友回復:
就你的場景來說,使用繼承完全多此一舉。uj5u.com熱心網友回復:
是這樣,我有時需要使用B類和C類共有的方法,我可以將這種方法寫在A類中,這樣就可以減少代碼的重寫。uj5u.com熱心網友回復:
就你這個和是不是繼承沒有關系。uj5u.com熱心網友回復:
為什么沒關系呢?我只想創建一個物件,可能需要B類或C類的個性,同時需要A類的共性,不需要使用繼承嗎?只是在創建物件Obj后,沒有辦法再使用B類或C類的個性方法或欄位,不知道有沒有好的方法解決。
我看了幾種創建形設計模式,但是好像都沒有辦法解決我的問題。
uj5u.com熱心網友回復:
我的意思是,你需要給不同的屬性賦值,這個程序和繼承沒有關系。雖然它們有繼承關系,但是在這里,就你的需求來說,繼承不繼承不重要。
極端地來說,任何類都是從Object型別派生的,但是這不等于我們必須時刻考慮到這一點才能寫程式。
uj5u.com熱心網友回復:
如果你非要有所簡化,那你可以考慮使用反射。uj5u.com熱心網友回復:
對不起,我的一段代碼有點問題,主程式應該是這樣:Sub Main()
Select i
Case 1
Dim Obj As New B
Case 2
Dim Obj As New C
End Select
Obj.AA=123
Obj.BB=234
End Sub
其中
Obj.AA=123
Obj.BB=234
會有編譯錯誤,有沒有辦法解決
uj5u.com熱心網友回復:
你只能定義一次ObjDim Obj As New A
Select i
Case 1
Obj = New B
DirectCast(Obj, B).AA = 123
...
uj5u.com熱心網友回復:
我的問題打給被解決了:Sub Main()
Dim Obj As A
Select i
Case 1
Obj = New B
DirectCast(Obj,B).AA=123
Case 2
Obj = New C
DirectCast(Obj,C).BB=234
End Select
我先定義了基類第一個變數Obj,然后再后期創建物件B或C,并賦值給變數Obj,這應該是后期系結,但是每次需要控制物件B或C的欄位或方法時,必須使用DirectCast或Ctype方法進行型別轉化,不使用DirectCast或Ctype方法還有其他的方法嗎?謝謝。
uj5u.com熱心網友回復:
反射Obj.GetType().GetField("AAA").SetValue(Obj, 123)
uj5u.com熱心網友回復:
父型別別的指標,可以指向子類。B,C類繼承自雷A
dim Obj as A
Select i
Case 1
Set Obj= New B
Case 2
Set Obj= New C
End Select
Obj.AA=123
Obj.BB=234
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/122852.html
標籤:VB基礎類
下一篇:查詢出現記憶體溢位
