vb.net – 初始化集合类

有没有办法初始化一个继承类型的类集合?

例如,这是我的代码:

Public Class CamryCar
    Property Name As String = "Camry"
    Property Color As String
End Class

Public Class RedCamry
    Inherits CamryCar
    Sub New()
        MyBase.New()
        Color = "Red"
    End Sub
End Class

Public Class BlueCamry
    Inherits CamryCar
    Sub New()
        MyBase.New()
        Color = "Blue"
    End Sub
End Class

我今天要做的事情是:

Public Class Camrys
    Property Cars As New List(Of CamryCar) From {New RedCamry,New BlueCamry}
End Class

但这给了我一个额外的汽车财产.

我也可以这样做:

Public Class Camrys
    Inherits List(Of CamryCar)
End Class

我更喜欢这个,因为我没有额外的财产来处理.但我可以找到一种方法来使用RedCamry和BlueCamry的对象初始化该列表.

这是不可能的还是有另一种方法可以做到这一点?

解决方法

只是另一种选择.我可能会将列表传递给构造函数.我还添加了一个额外的Sub New(),它将通过反射初始化集合.

Imports System.Reflection

Module Module1

    Sub Main()
        Dim camrys As New Camrys

        For Each camry As CamryCar In camrys
            Console.WriteLine(camry.Color)
        Next

        Console.ReadKey()
    End Sub

End Module

Public Class Car

End Class

Public Class CamryCar
    Inherits Car
    Property Name As String = "Camry"
    Property Color As String
End Class

Public Class RedCamry
    Inherits CamryCar
    Sub New()
        MyBase.New()
        Color = "Red"
    End Sub
End Class

Public Class BlueCamry
    Inherits CamryCar
    Sub New()
        MyBase.New()
        Color = "Blue"
    End Sub
End Class

Public Class Camrys
    Inherits List(Of CamryCar)

    Public Sub New(ByVal Camrys As List(Of CamryCar))
        MyBase.New()

        For Each Camry As CamryCar In Camrys
            Add(Camry)
        Next
    End Sub

    Public Sub New()
        MyBase.New()
        InitializeCamrys()
    End Sub

    Public Sub InitializeCamrys()
        Dim asm As Assembly = Assembly.GetExecutingAssembly()

        For Each t As Type In asm.GetTypes()
            If GetType(CamryCar) Is t.BaseType Then
                Dim camry As CamryCar = Activator.CreateInstance(t)
                Add(camry)
            End If
        Next
    End Sub

End Class

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...