我创建了一个虚类
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类的对象,因为在样可以节省内存空间,我知道我理解的对不对。
谢谢指教。

解决方案 »

  1.   

    是这样,我有时需要使用B类和C类共有的方法,我可以将这种方法写在A类中,这样就可以减少代码的重写。
      

  2.   

    为什么没关系呢?我只想创建一个对象,可能需要B类或C类的个性,同时需要A类的共性,不需要使用继承吗?
    只是在创建对象Obj后,没有办法再使用B类或C类的个性方法或字段,不知道有没有好的方法解决。
    我看了几种创建形设计模式,但是好像都没有办法解决我的问题。
      

  3.   

    我的意思是,你需要给不同的属性赋值,这个过程和继承没有关系。虽然它们有继承关系,但是在这里,就你的需求来说,继承不继承不重要。极端地来说,任何类都是从Object类型派生的,但是这不等于我们必须时刻考虑到这一点才能写程序。
      

  4.   

    对不起,我的一段代码有点问题,主程序应该是这样:
    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
    会有编译错误,有没有办法解决
      

  5.   

    你只能定义一次Obj
    Dim Obj As New A
    Select i
    Case 1
      Obj = New B
      DirectCast(Obj, B).AA = 123
    ...
      

  6.   

    我的问题打给被解决了:
    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方法还有其他的方法吗?谢谢。
      

  7.   

    反射Obj.GetType().GetField("AAA").SetValue(Obj, 123)
      

  8.   

    父类类型的指针,可以指向子类。
    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