回复人: TechnoFantasy(www.applevb.com) (  ) 信誉:100  2002-3-4  19:40:52  得分:0  
 
 
  VB最为人垢病的是它的面向对象特性。实际上VB是一种基于对象的开发工具。在VB中
  建立的类是支持继承的。下面是范例:
  
  首先建立一个新工程,然后添加一个新的类模块(Class  Module),类名称设定为BaseClass。
  然后在BaseClass中加入以下代码:
  
  Public  Sub  BaseSub()        '虚拟特性,BaseSub在子类中实现
  
  End  Sub
  
  然后添加两个类模块,类名称分别设定为ImpClass以及ImpClass2,然后在类的代码窗口中写入:
  Implements  BaseClass        '继承特性
  上面这行代码说明类ImpClass以及ImpClass2实现类BaseClass。
  在ImpClass窗口中加入以下代码:
  Private  Sub  BaseClass_BaseSub()  '实现基类中的BaseSub方法
          MsgBox  "Hello.  This  is  Imp.  inherited  from  BaseClass"
  End  Sub
  
  在ImpClass2中加入以下代码:
  Private  Sub  BaseClass_BaseSub()
          MsgBox  "Hello.  This  is  Imp2.  inherited  from  BaseClass"
  End  Sub
  
          完成了上面的类代码后,打开Form1,在上面添加一个CommandButton,在按钮的Click事件中
  写入以下代码:
  
          Dim  xImp  As  New  ImpClass
          Dim  xIMp2  As  New  ImpClass2
          Dim  xBase  As  BaseClass
          
          Set  xBase  =  xImp        '多态特性
          xBase.BaseSub
          Set  xBase  =  xIMp2
          xBase.BaseSub
          Set  xBase  =  Nothing
          
          Set  xImp  =  Nothing
          Set  xIMp2  =  Nothing
  
  
          运行程序,点击CommandButton,程序会先后弹出消息框,显示在ImpClass以及ImpClass2中
  设定的消息。
          从上面的代码中可以看到VB中是如何实现面向对象的特性:继承、虚拟以及多态的。只是同
  诸如Java、C++、Object  Pascal不同,VB将很多实现的细节隐藏了起来。 
Top 
 
 回复人: Bardo(巴顿) (  ) 信誉:76  2002-3-4  20:20:39  得分:0  
 
 
  其实很多人在DLL中用窗体,事实上是不会用这些方法!
  比如要在窗体中实现函数或事件,则不必将窗体加在DLL中
  只要用继承即可!
  
  
  比如在类ClsTest中定义一个虚函数Change(),即不需要一行代码的函数
  然后
  窗体中加上
  Implements  ClsTest
  (这样即可看到窗体中有了ClsTest_Change())
  再有下列代码:
  Dim  CTest  as  New  ClsTest
  Dim  Form  as  form1
  
  Set  Form  =  New  form1
  Set  CTest  =  Form  
  
  这样即让窗体直正继承了类ClsTest
  
  在DLL中只要调用ClsTest这个类中的Change()
  而体中ClsTest_Change()的代码即会执行!
  
   
Top 
 
 回复人: Bardo(巴顿) (  ) 信誉:76  2002-3-4  20:22:15  得分:0  
 
 
  因为虚函数,所以通过继承实现重载是绝对可以的,因而是可以多态的!
  但这又不是与VC中的方式等同的!
   
Top 
 
 回复人: Bardo(巴顿) (  ) 信誉:76  2002-3-4  20:39:15  得分:0  
 
 
  同样以前人们讨论窗体继承,实际上窗体是可以继承类的
  但控则是通过容器类实现的!
  所以窗体界面要实际模板化,则要使用UserControl类!! 
http://www.csdn.net/expert/topic/554/554685.xml?temp=.8869898

解决方案 »

  1.   

    Implements 语句示例
    下面的示例说明如何使用 Implements 语句来编写多个类都可以使用的一系列声明。通过 Implements 语句共享这些声明,所有的类都不必再自己进行声明。假设有两个窗体。其中 Selector 窗体有两个按钮,Customer Data 和 Supplier Data。若要输入客户或供应商的名称及地址信息,用户就单击 Selector 窗体的 Customer Date 按钮或 Supplier Date 按钮,然后使用 Data Entry 窗体来输入名称和地址。Data Entry 窗体有两个文本字段,Name 和 Address。下面的共享声明的代码位于称为 PersonalData 的类中:Public Name As String
    Public Address As String有关处理客户数据的代码位于 Customer 类模块:Implements PersonalData
    Private Property Get PersonalData_Address() As String
    PersonalData_Address = "CustomerAddress"
    End PropertyPrivate Property Let PersonalData_Address(ByVal RHS As String)
    '
    End PropertyPrivate Property Let PersonalData_Name(ByVal RHS As String)
    '
    End PropertyPrivate Property Get PersonalData_Name() As String
    PersonalData_Name = "CustomerName"
    End Property有关处理供应商数据的代码位于 Supplier 类模块:Implements PersonalDataPrivate Property Get PersonalData_Address() As String
    PersonalData_Address = "SupplierAddress"
    End PropertyPrivate Property Let PersonalData_Address(ByVal RHS As String)
    '
    End PropertyPrivate Property Let PersonalData_Name(ByVal RHS As String)
    '
    End PropertyPrivate Property Get PersonalData_Name() As String
    PersonalData_Name = "SupplierName"
    End Property下面的代码负责处理 Selector 窗体:Private cust As New Customer
    Private sup As New SupplierPrivate Sub Command1_Click()
    Dim frm2 As New Form2
        Set frm2.PD = cust
        frm2.Show 1
    End SubPrivate Sub Command2_Click()
    Dim frm2 As New Form2
        Set frm2.PD = sup
        frm2.Show 1
    End Sub下面的代码负责处理 Data Entry 窗体:Private m_pd As PersonalData
    Private Sub Form_Load()
        With m_pd
            Text1 = .Name
            Text2 = .Address
        End With
    End Sub
    Public Property Set PD(Data As PersonalData)
        Set m_pd = Data
    End Property
      

  2.   

    1、我猜你的class2中没有公开的方法或属性
    2、vb中通过委派或包容获得可重用性,但不支持直接的继承
      

  3.   

    其实vb的可视化组件模型比C++的类继承更简单易用也易理解。如果你一定要以C++的思想去使用VB,那么你只会得到失败。你做过自定义OCX就会明白。
      

  4.   

    用VB是无法真正继承一个类的,Implements继承的只是类的接口
    要真正的继承,就到VB.Net里去吧
      

  5.   

    vb无法实现真正意义上的继承;vb中的继承是通过在子类中拷贝一份父类的代码实现的
      

  6.   

    TechnoFantasy(www.applevb.com) (  ) 感谢你收集我的言论,
    如果这样
    以后我即可以出版《VB乱谈及其它》了
      

  7.   

    Public Class Form1 
        Inherits System.Windows.Forms.Form别说这不是VB
      

  8.   

    其实在一个或多个类的基础上设计新的类有两方式:继承和组合。
    我在think in C++上看到的。
    VB支持组合。