首页 > 解决方案 > 自定义对象的问题

问题描述

如果我有 2 个自定义数据类型/类,例如:A 类和 B 类

如果我在 C 类中这样做

Public Class C
Public Property F As New Object
End Class

我实际上可以将 A 类或 B 类分配给 F 属性并能够通过 C 类使用/分配其属性和方法吗?

我尝试将 A 类或 B 类分配给我的 F 对象,但它出错了。有没有办法真正做到这一点?

谢谢!

编辑我对 DirectCast 的理解:

在我的 Sub 中(当我已经知道要投射到哪个对象时):

    Dim myClassCObject As New Class C
    dim x as string = "Some String"
    myClassCObject.TypeFind(x)
    If myClassCObject.GetType.ToString = "ClassA" then
        Assign ClassA Properties
     Elseif MyClassOBject.GetType.ToString = "ClassB" then
     'Assign ClassB properties
    End if

C类中的以下内容如何:

 Public Sub TypeFind(X as string)
    'x.count will let me know what type i need to cast to.
    If X.Count = 16 then
    F = DirectCast(F, ClassA)
    Else
    F = DirectCast(F, ClassB)
    End if
    End Sub

^^^^^ '不幸的是,这会导致运行时错误并且不起作用

我要更详细地问什么:

当我实例化 C 类对象时,我希望能够根据我拥有的字符串参数将 C 类的 F 属性分配为 ClassA 或 ClassB 对象。请记住,F 属性开始时只是一个普通的 OBJECT,并且希望将其更改为 ClassA 或 ClassB,然后加载相应的属性。因此,我编写的非工作方法称为 TypeFind(x as string)。x 是参数,确定要更改的对象 F 是 C 类的方法

标签: vb.netclassobject

解决方案


就像评论一样,当你设置你的属性时,这并不是真正发生的事情,而是当你检索你想要处理的它时发生的事情。不是最完美的解决方案,但作为初学者,像这样

Dim instance1 as New ClassC
Dim instance2 as New ClassC

instance1.F = new ClassA
instance2.F = new ClassB

DoSomeWork(instance1)
DoSomeWork(instance2)

Sub DoSomeWork(ByVal myClassCObject as ClassC)
    If TypeOf myClassCObject.F  Is ClassA Then
        with DirectCast(myClassCObject.F, ClassA)
            'Do ClassA Suff
        End with
    ElseIf TypeOf myClassCObject.F  Is ClassB Then
        with DirectCast(myClassCObject.F, ClassB)
            'Do ClassB Stuff
        End with
    End If
End Sub

当然,如果 ClassA 和 ClassB 之间有一些共享属性,您可能希望查看继承或接口,它们允许您将事物的范围比对象更精细


推荐阅读