2009-10-03 84 views
1

假設「消息」的一個基本類型...VB.NET List(Of T) - 我可以用它來保存幾種類型的項目嗎?

Public Class Message 
    Public ID As Int64 
    Public Text As String 
    Public MessageType as String 
End Class 

...然後兩個派生類...

Public Class PhoneMessage 
    Inherits Message 
    Public MessageLength As Int64 
End Class 

Public Class MailMessage 
    Inherits Message 
    Public Postage As Int64 
End Class 

我想有消息對象中的一個收集其可以可以是PhoneMessages或MailMessages,這樣我就可以遍歷列表並根據它發生的類型處理每條消息。

試圖只使用.Add()失敗,說我不能將一個類型的PhoneMessage項添加到列表(消息)。有沒有一些優雅的方式來完成我想要做的事情?我曾以爲我可以用泛型來完成這一點,但我認爲我的理解存在差距。如果可以在.NET 2.0中完成,那將是理想的。

預先感謝您。

+0

請向我們展示創建列表並嘗試添加到其中的代碼。 – RBarryYoung 2009-10-03 04:56:13

回答

2

你描述你是如何加入的項目清單應的工作方式。也許你的代碼中缺少一些東西?有了你給你的類的代碼,這應該做的伎倆:

Dim phoneMessage As New PhoneMessage() 
    Dim mailMessage As New MailMessage() 

    Dim messageList As New List(Of Message)() 

    messageList.Add(phoneMessage) 
    messageList.Add(mailMessage) 
+0

我現在看到我的愚蠢。我正在創建一個List(Of PhoneMessage),並試圖用.AddRange()將該列表添加到List(Of Message)中。 現在我看到了正確的方法。謝謝,StackOverflow! – DWRoelands 2009-10-03 09:04:49

0

奇怪的是,這真的應該工作。您是否嘗試過使用CType()或DirectCast將其轉換爲消息?

1

你只需要投PhoneMessage到其基類的消息

0

下面是一些代碼,證明scottman666是正確的:

Public Class InheritanceTest 
    Public Class Message 
     Public ID As Int64 
     Public Text As String 
     Public MessageType As String 
    End Class 

    Public Class PhoneMessage 
     Inherits Message 
     Public MessageLength As Int64 

    End Class 

    Public Class MailMessage 
     Inherits Message 
     Public Postage As Int64 
    End Class 

    Public Shared Sub ListTest() 
     Dim lst As New List(Of Message) 
     Dim msg As Message 

     msg = New PhoneMessage() 

     lst.Add(msg) 
     lst.Add(New MailMessage()) 
    End Sub 
End Class 

我建議您考慮使用Overidable和MustOveride功能製作多態對象。有一個很好的方法來處理你的工作設計模式。

+0

這可能是他有選擇嚴格或選項顯式打開。 – 2009-10-03 05:59:11

相關問題