关于类创建的一个问题

liuzhifeng168 2014-04-10 08:33:36
我创建了一个虚类
Public MustInherit Class A
...
End Class
然后创建了两个类继承它
Public MustInherit Class B : Inherits A
Public AA As Single
End Class
Public MustInherit Class C : Inherits A
Public BB As Single
End Class
现在我想在主程序中使用Select Case语句在主程序中创建一个对象Obj
Sub Main()
Select i
Case 1
Dim Obj As New B
Case 2
Dim Obj As New B
End Select
Obj.AA=123
Obj.BB=234
End Sub
由于在主程序中我发确认创建的对象属于哪个类,因此上面的编码无法实现,不知有没有好办法仅创建一个对象Obj,在特定条件下实现为B类的功能或C类的功能。
我不想同时创建B类和C类的对象,因为在样可以节省内存空间,我知道我理解的对不对。
谢谢指教。




...全文
263 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
王二.麻子 2014-04-28
  • 打赏
  • 举报
回复
父类类型的指针,可以指向子类。
B,C类继承自雷A
dim Obj as A
Select i
Case 1
Set Obj= New B
Case 2
Set Obj= New C
End Select
Obj.AA=123
Obj.BB=234
End Sub
threenewbee 2014-04-12
  • 打赏
  • 举报
回复
你只能定义一次Obj Dim Obj As New A Select i Case 1 Obj = New B DirectCast(Obj, B).AA = 123 ...
threenewbee 2014-04-12
  • 打赏
  • 举报
回复
反射 Obj.GetType().GetField("AAA").SetValue(Obj, 123)
liuzhifeng168 2014-04-12
  • 打赏
  • 举报
回复
我的问题打给被解决了:
Sub Main()
Dim Obj As A
Select i
Case 1
Obj = New B
DirectCast(Obj,B).AA=123
Case 2
Obj = New C
DirectCast(Obj,C).BB=234
End Select

我先定义了基类第一个变量Obj,然后再后期创建对象B或C,并赋值给变量Obj,这应该是后期绑定,但是每次需要控制对象B或C的字段或方法时,必须使用DirectCast或Ctype方法进行类型转化,不使用DirectCast或Ctype方法还有其他的方法吗?谢谢。
liuzhifeng168 2014-04-11
  • 打赏
  • 举报
回复
对不起,我的一段代码有点问题,主程序应该是这样:
Sub Main()
Select i
Case 1
Dim Obj As New B
Case 2
Dim Obj As New C
End Select
Obj.AA=123
Obj.BB=234
End Sub

其中
Obj.AA=123
Obj.BB=234
会有编译错误,有没有办法解决
threenewbee 2014-04-11
  • 打赏
  • 举报
回复
如果你非要有所简化,那你可以考虑使用反射。
threenewbee 2014-04-11
  • 打赏
  • 举报
回复
我的意思是,你需要给不同的属性赋值,这个过程和继承没有关系。 虽然它们有继承关系,但是在这里,就你的需求来说,继承不继承不重要。 极端地来说,任何类都是从Object类型派生的,但是这不等于我们必须时刻考虑到这一点才能写程序。
liuzhifeng168 2014-04-11
  • 打赏
  • 举报
回复
为什么没关系呢?我只想创建一个对象,可能需要B类或C类的个性,同时需要A类的共性,不需要使用继承吗? 只是在创建对象Obj后,没有办法再使用B类或C类的个性方法或字段,不知道有没有好的方法解决。 我看了几种创建形设计模式,但是好像都没有办法解决我的问题。
threenewbee 2014-04-11
  • 打赏
  • 举报
回复
就你这个和是不是继承没有关系。
liuzhifeng168 2014-04-11
  • 打赏
  • 举报
回复
是这样,我有时需要使用B类和C类共有的方法,我可以将这种方法写在A类中,这样就可以减少代码的重写。
threenewbee 2014-04-10
  • 打赏
  • 举报
回复
就你的场景来说,使用继承完全多此一举。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧