【问题标题】:Extending a base class to a derived class将基类扩展为派生类
【发布时间】:2013-04-27 14:04:05
【问题描述】:

我们有两个类 BasicRace 和 AdvancedRace。 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

任何帮助都会很棒 - 我开始认为它无法完成,除非我编写一个函数将 basicRace 转换为 AdvancedRace 逐个遍历每个属性?

【问题讨论】:

  • 你可以编写一个高级种族的构造函数,它接受基本种族的参数,然后这样做。
  • 我如何将 basicRace 传递给 AdvancedClass 的基础?

标签: vb.net oop inheritance polymorphism


【解决方案1】:

您不能从基类“转换”为子类(不能更改现有对象的类型),但您可以创建从基类复制属性的子类的新实例.

为您的类实现此功能的典型方法可能是:

  • AdvancedRace 中的构造函数接受 BasicRace 参数并从中复制属性
  • AdvancedRace 中的静态方法,接受 BasicRace 参数,创建具有复制属性的新对象,然后返回它

值得注意的是,这将导致两个完全独立的对象(每种类型一个)根本没有链接 - AdvancedRace 对象的更改不会反映在 BasicRace 中,反之亦然.

【讨论】:

  • 我开始觉得没有办法解决这个问题,我将不得不编写和维护一些代码来从 BasicRace 转换为 AdvancedRace
  • 是的,你肯定需要那种形式的东西。
猜你喜欢
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 2017-01-08
  • 2013-11-17
  • 2016-08-30
  • 2020-03-25
相关资源
最近更新 更多