vb.net - 自定义对象的问题
问题描述
如果我有 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 类的方法
解决方案
就像评论一样,当你设置你的属性时,这并不是真正发生的事情,而是当你检索你想要处理的它时发生的事情。不是最完美的解决方案,但作为初学者,像这样
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 之间有一些共享属性,您可能希望查看继承或接口,它们允许您将事物的范围比对象更精细
推荐阅读
- git - 错误:RPC 失败;curl 18 传输关闭,剩余未完成的读取数据,
- image - Silverstripe 4.6 从 url 创建/保存图像对象
- javascript - 从行中删除下拉列表和文本字段会删除 ReactJS 中状态更改的不正确字段
- python - `list` 的内存分配如何在 Python 中工作?为什么列表的大小与其对象的总和不同?
- flutter - 浮动按钮不改变位置
- r - 修改或检索 kableExtra 的乳胶输出
- python - kivy.properties 模块中没有名称“对象属性” pylint 模块中没有名称
- angular - Bootstrap 4 - 左列宽度变化,取决于右列的内容
- mongodb - 创建架构与添加附加字段?
- java - 避免两者的惯用方法:内存泄漏和 ConcurrentModificationException