如果我有两个自定义数据类型/类,比如:B类
如果我在CLASS 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属性开始时只是一个普通对象,并且希望将其更改为ClassA或ClassB,然后加载各自的属性。因此,我编写的不起作用的方法称为TypeFind(x作为字符串)。x是参数,它决定将F更改为的对象,该对象是类C的方法Class
就像注释一样,设置属性时并不会发生什么,而是取回你想要处理的属性时发生什么。不是最完美的解决方案,但作为一个开始,像这样的
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
当然,如果在类a和类b之间有一些共享属性,你可能想看看继承或接口,它允许你比对象
更精细地定义范围。我的解决方案
不需要强制转换。
在类C对象中,我从F属性中删除了NEW。
现在C类是这样的
Public Class C
Public F As Object
End Class
由于在实例化类c时没有F的新实例
我现在可以在类C中调用这个方法:
Public Sub InitializeType(x as string)
if x.count > 10
F = New ClassA
Else
F = New ClassB
End If
End Sub
Public Sub CastType(ByRef myObject as Object)
If typeof F is ClassA then
myObject = DirectCast(myObject, ClassA)
Else if typeof F is ClassB Then
myObject = DirectCast(myObject, ClassB)
End if
在我的应用程序和我是如何修改它的:
Dim MyClassCObject as New ClassC
MyClassCObject.InitializeType("xxxxxxxxxxx")
'String is longer than 10 so F type in ClassC is now a NEW ClassA
dim myObject as obJect
MyClassObject.CastType(myObject)
myObject现在可以使用我需要的正确属性了。
它为我想要的工作,即使我可能做错了
是时候开派对了