假设基本类型为“消息”......
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
我想拥有一个Message对象集合,可以是PhoneMessages或MailMessages,这样我就可以遍历列表并根据它发生的类型来处理每个消息。
尝试使用.Add()失败,说我无法将类型为PhoneMessage的项添加到List(Of Message)。是否有一些优雅的方式来完成我想要做的事情?我以为我可以通过泛型完成这个,但我认为我的理解存在差距。如果它可以在.NET 2.0中完成,那将是理想的。
提前谢谢。
答案 0 :(得分:2)
您描述如何将项目添加到列表的方式应该有效。也许您的代码中缺少某些内容?使用您为类提供的代码,这应该可以解决问题:
Dim phoneMessage As New PhoneMessage()
Dim mailMessage As New MailMessage()
Dim messageList As New List(Of Message)()
messageList.Add(phoneMessage)
messageList.Add(mailMessage)
答案 1 :(得分:1)
您只需要将PhoneMessage强制转换为其基类Message
答案 2 :(得分:0)
奇怪,这确实应该奏效。您是否尝试过使用CType()或DirectCast将其强制转换为消息?
答案 3 :(得分: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函数来制作多态对象。有一种很好的方法可以处理您使用的设计模式。