You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用继承或重载简化仅内部类属性不同的重复类定义?

简化重复类结构的方案

针对你这种结构高度一致、仅内部类属性存在差异的场景,泛型是最简洁的解决方案,可以彻底消除重复代码。以下是具体实现方式:

方案1:泛型基类(保留原类名和属性名)

如果必须保留原有的类名(如Class_1_outer)和属性名(如field_3_1),可以先定义一个泛型基类封装通用结构,再让具体类继承并扩展:

' 泛型基类:封装所有外部类的通用逻辑
Public Class BaseOuter(Of T)
    Public Property field_1 As String
    Public Property field_2 As BaseInner(Of T)

    Public Class BaseInner(Of TInner)
        ' 通用内部属性,作为子类属性的底层存储
        Protected Property InnerValue As TInner
    End Class
End Class

' 具体类1:仅需定义特定的属性名和类型
Public Class Class_1_outer
    Inherits BaseOuter(Of String)

    Public Class Class_1_inner
        Inherits BaseOuter(Of String).BaseInner(Of String)
        ' 映射到原属性名
        Public Property field_3_1 As String
            Get
                Return MyBase.InnerValue
            End Get
            Set(value As String)
                MyBase.InnerValue = value
            End Set
        End Property
    End Class

    ' 重写field_2的类型为当前内部类
    Public Shadows Property field_2 As Class_1_inner
End Class

' 具体类2:同理扩展
Public Class Class_2_outer
    Inherits BaseOuter(Of Integer)

    Public Class Class_2_inner
        Inherits BaseOuter(Of Integer).BaseInner(Of Integer)
        Public Property field_3_2 As Integer
            Get
                Return MyBase.InnerValue
            End Get
            Set(value As Integer)
                MyBase.InnerValue = value
            End Set
        End Property
    End Class

    Public Shadows Property field_2 As Class_2_inner
End Class

方案2:直接使用泛型类(更简洁,推荐)

如果可以接受统一属性名(如把field_3_1/field_3_2统一为InnerField),无需定义多个重复类,直接用泛型类即可:

Public Class GenericOuter(Of T)
    Public Property field_1 As String
    Public Property field_2 As GenericInner(Of T)

    Public Class GenericInner(Of TInner)
        Public Property InnerField As TInner
    End Class
End Class

' 使用示例
Dim outer1 As New GenericOuter(Of String)()
outer1.field_1 = "外部字符串"
outer1.field_2.InnerField = "内部字符串"

Dim outer2 As New GenericOuter(Of Integer)()
outer2.field_1 = "外部字符串2"
outer2.field_2.InnerField = 12345

这种方式完全消除了重复代码,后续新增类似结构只需指定泛型类型即可,维护成本极低。

内容的提问来源于stack exchange,提问作者jaume

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:57:40