1

BasicRace と AdvancedRace の 2 つのクラスがあります。AdvancedRace は BasicRace を継承しています

私は BasicRace を持っていますが、それを上級クラスに「変換」したいと考えています。

例として以下のコードを参照してください。

Module Module1
    Sub Main()
        Dim bRace As New BasicRace With {.CourseID = 1, .MeetingDate = "2013-05-01", .RaceNumber = 1}
        Dim aRace As New AdvancedRace

        ' Upgrade bRace to AdvancedRace???????
    End Sub
End Module

Public Class BasicRace
    Public Property MeetingDate As Date
    Public Property CourseID As Integer
    Public Property RaceNumber As Integer
End Class

Public Class AdvancedRace
    Inherits BasicRace
    Public Property RaceTitle As String
End Class

どんな助けでも素晴らしいでしょう - 各プロパティを1つずつ通過するbasicRaceをAdvancedRaceに変換する関数を書かない限り、それはできないと思い始めていますか?

4

1 に答える 1

2

基本クラスからサブクラスに「変換」することはできませんが (既存のオブジェクトの型を変更することはできません)、基本クラスからプロパティをコピーするサブクラスの新しいインスタンスを作成できます。

これをクラスに実装する一般的な方法は次のとおりです。

  • AdvancedRaceパラメータを取り、BasicRaceそこからプロパティをコピーするコンストラクタ
  • AdvancedRaceパラメータを受け取り、BasicRaceプロパティをコピーして新しいオブジェクトを作成し、それを返す静的メソッド

これにより、まったくリンクされていない 2 つの完全に別個のオブジェクト (各タイプに 1 つずつ) が生成されることに注意してください。AdvancedRaceオブジェクトの変更は に反映されませんBasicRace。その逆も同様です。

于 2013-05-03T08:26:38.653 に答える