vb6不支持多重接口继承

来源:互联网 发布:龙渊网络代号 龙官网 编辑:程序博客网 时间:2024/05/12 21:17
VB6 如何实现多重接口继承 [问题点数:20分,结帖人xxyj6450]
收藏
楼主 发表于: 2009-09-20 11:11:05
直接来代码
Visual Basic code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'类C1
public sub C()
 
end Sub
 
'类C2
Implements C1
public sub C1_C()
 
end Sub
 
'C3
 
Implements C2
 
'C3要如何实现C2和C1中的接口?
  • <iframe width="200" height="22" align="center,center" id="iframeu1636200_0" src="http://pos.baidu.com/xclm?rdid=1636200&amp;dc=2&amp;di=u1636200&amp;dri=0&amp;dis=0&amp;dai=2&amp;ps=1002x396&amp;dcb=BAIDU_SSP_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1462502258649&amp;ti=VB6%20%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%A4%9A%E9%87%8D%E6%8E%A5%E5%8F%A3%E7%BB%A7%E6%89%BF-CSDN%E8%AE%BA%E5%9D%9B-CSDN.NET-%E4%B8%AD%E5%9B%BD%E6%9C%80%E5%A4%A7%E7%9A%84IT%E6%8A%80%E6%9C%AF%E7%A4%BE%E5%8C%BA&amp;ari=1&amp;dbv=0&amp;drs=3&amp;pcs=1371x683&amp;pss=1371x19091&amp;cfv=20&amp;cpl=2&amp;chi=2&amp;cce=true&amp;cec=utf-8&amp;tlm=1462502258&amp;ltu=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F320043695&amp;ltr=http%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DdVWhTfIZfC2eXhY5bfvE8f3Yxk7uDZF1JtSwbtOjaRgd0RuiMgQZiW-5JmjBINon%26wd%3D%26eqid%3Db9571fab000231a200000005572c0365&amp;ecd=1&amp;psr=1371x857&amp;par=1371x779&amp;pis=-1x-1&amp;ccd=24&amp;cja=true&amp;cmi=4&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1462502259&amp;qn=1a2fd476de0d1714&amp;tt=1462502258631.27.383.384" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" vspace="0" hspace="0" style="margin: 0px; border: 0px currentColor; border-image: none; vertical-align: bottom;" allowtransparency="true"></iframe>
  • <iframe width="200" height="22" align="center,center" id="iframeu1636201_0" src="http://pos.baidu.com/xclm?rdid=1636201&amp;dc=2&amp;di=u1636201&amp;dri=0&amp;dis=0&amp;dai=3&amp;ps=1002x650&amp;dcb=BAIDU_SSP_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1462502258649&amp;ti=VB6%20%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%A4%9A%E9%87%8D%E6%8E%A5%E5%8F%A3%E7%BB%A7%E6%89%BF-CSDN%E8%AE%BA%E5%9D%9B-CSDN.NET-%E4%B8%AD%E5%9B%BD%E6%9C%80%E5%A4%A7%E7%9A%84IT%E6%8A%80%E6%9C%AF%E7%A4%BE%E5%8C%BA&amp;ari=1&amp;dbv=0&amp;drs=3&amp;pcs=1371x683&amp;pss=1371x19091&amp;cfv=20&amp;cpl=2&amp;chi=2&amp;cce=true&amp;cec=utf-8&amp;tlm=1462502258&amp;ltu=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F320043695&amp;ltr=http%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DdVWhTfIZfC2eXhY5bfvE8f3Yxk7uDZF1JtSwbtOjaRgd0RuiMgQZiW-5JmjBINon%26wd%3D%26eqid%3Db9571fab000231a200000005572c0365&amp;ecd=1&amp;psr=1371x857&amp;par=1371x779&amp;pis=-1x-1&amp;ccd=24&amp;cja=true&amp;cmi=4&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1462502259&amp;qn=768200b2c60df8cb&amp;tt=1462502258631.29.401.402" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" vspace="0" hspace="0" style="margin: 0px; border: 0px currentColor; border-image: none; vertical-align: bottom;" allowtransparency="true"></iframe>
  • <iframe width="200" height="22" align="center,center" id="iframeu1636204_0" src="http://pos.baidu.com/xclm?rdid=1636204&amp;dc=2&amp;di=u1636204&amp;dri=0&amp;dis=0&amp;dai=4&amp;ps=1002x904&amp;dcb=BAIDU_SSP_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1462502258649&amp;ti=VB6%20%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%A4%9A%E9%87%8D%E6%8E%A5%E5%8F%A3%E7%BB%A7%E6%89%BF-CSDN%E8%AE%BA%E5%9D%9B-CSDN.NET-%E4%B8%AD%E5%9B%BD%E6%9C%80%E5%A4%A7%E7%9A%84IT%E6%8A%80%E6%9C%AF%E7%A4%BE%E5%8C%BA&amp;ari=1&amp;dbv=0&amp;drs=3&amp;pcs=1371x683&amp;pss=1371x19091&amp;cfv=20&amp;cpl=2&amp;chi=2&amp;cce=true&amp;cec=utf-8&amp;tlm=1462502258&amp;ltu=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F320043695&amp;ltr=http%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DdVWhTfIZfC2eXhY5bfvE8f3Yxk7uDZF1JtSwbtOjaRgd0RuiMgQZiW-5JmjBINon%26wd%3D%26eqid%3Db9571fab000231a200000005572c0365&amp;ecd=1&amp;psr=1371x857&amp;par=1371x779&amp;pis=-1x-1&amp;ccd=24&amp;cja=true&amp;cmi=4&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1462502259&amp;qn=0d2efbff457d209a&amp;tt=1462502258631.31.374.374" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" vspace="0" hspace="0" style="margin: 0px; border: 0px currentColor; border-image: none; vertical-align: bottom;" allowtransparency="true"></iframe>
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    回复次数:66
    #1 得分:0回复于: 2009-09-20 12:00:36
    Visual Basic code
    ?
    1
    2
    3
    'Class C3
    Implements C1
    Implements C2
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #2 得分:0回复于: 2009-09-20 12:06:07
    楼上的好像不行哦
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #3 得分:0回复于: 2009-09-20 12:08:35
    在  javaEE中重载
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #4 得分:5回复于: 2009-09-20 12:24:55
    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    '---------------------------------------------------------------------------------------
    ' Module    : Class1
    ' Author    : Anna
    ' Date      : 2009-9-20
    ' Purpose   : Abstract class
    '---------------------------------------------------------------------------------------
     
    Option Explicit
     
    Public Sub M1()
     
    End Sub


    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    '---------------------------------------------------------------------------------------
    ' Module    : Class2
    ' Author    : Anna
    ' Date      : 2009-9-20
    ' Purpose   : Implements Class1
    '---------------------------------------------------------------------------------------
     
    Option Explicit
     
    Implements Class1
     
    Private Sub Class1_M1()
        Debug.Print "Class2's implementation of Class1's M1"
    End Sub
     
    Public Sub M2()
     
    End Sub


    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    '---------------------------------------------------------------------------------------
    ' Module    : Class3
    ' Author    : Anna
    ' Date      : 2009-9-20
    ' Purpose   : Implements Class1 and Class2
    '---------------------------------------------------------------------------------------
     
    Option Explicit
    Implements Class1
    Implements Class2
     
    Private Sub Class1_M1()
        Debug.Print "Class3's implementation of Class1's M1"
    End Sub
     
    Private Sub Class2_M2()
        Debug.Print "Class3's implementation of Class2's M2"
    End Sub


    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    '---------------------------------------------------------------------------------------
    ' Module    : Module1
    ' Author    : Anna
    ' Date      : 2009-9-20
    ' Purpose   : Test Multi-Inheritance
    '---------------------------------------------------------------------------------------
     
    Option Explicit
     
    Sub Test_MultiInherit()
        Dim aa As Class1
        Dim bb As Class2
        Dim cc As Class3
         
        Set cc = New Class3
         
        Set bb = cc
        Call bb.M2
        Set bb = Nothing
         
        Set aa = cc
        Call aa.M1
        Set aa = Nothing
         
        Set cc = Nothing
    End Sub
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #5 得分:0回复于: 2009-09-20 12:33:28
    如果你的意思是想在Class3里继承Class2里的Class1_M1()的话,据我所知,好像是不被VB支持的。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #6 得分:0回复于: 2009-09-20 12:48:37
    我感觉VB里并不支持爷孙继承,它不会了解这种隔一代的血缘关系。你看下面的例子(Class1和Class2的定义同4楼):
    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '---------------------------------------------------------------------------------------
    ' Module    : Class3
    ' Author    : Anna
    ' Date      : 2009-9-20
    ' Purpose   : Implements Class2 only
    '---------------------------------------------------------------------------------------
     
    Option Explicit
    Implements Class2
     
    Private Sub Class2_M2()
        Debug.Print "Class3's implementation of Class2's M2"
    End Sub


    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    '---------------------------------------------------------------------------------------
    ' Module    : Module1
    ' Author    : Anna
    ' Date      : 2009-9-20
    ' Purpose   : Does VB know anything about Grandpa?
    '---------------------------------------------------------------------------------------
     
    Option Explicit
     
    Sub Test_MultiInherit()
        Dim aa As Class1
        Dim bb As Class2
        Dim cc As Class3
         
        Set cc = New Class3
         
        Set bb = cc
        Call bb.M2
     
    '    Set bb = New Class2
        Set aa = bb 'Type MisMatch, 除非把上一句取消注释'
        Call aa.M1
        Set aa = Nothing
        Set bb = Nothing
         
        Set cc = Nothing
    End Sub


    上面这段代码说明,Class3能够了解自己继承自Class2,但是并不会进一步去了解Class2继承自Class1。所以你可以Set bb = cc,但是不能进一步Set aa = bb,更不能Set aa = cc。VB只能记录父类子类这样单层的继承关系。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #7 得分:0回复于: 2009-09-20 12:54:09
    引用 5 楼 slowgrace 的回复:
    如果你的意思是想在Class3里继承Class2里的Class1_M1()的话,据我所知,好像是不被VB支持的。

    class2里的class1_m1是class1里m1接口的实现,class3如果要继承class2里的class1_m1的话直接去实现class1里的m1接口好了。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #8 得分:0回复于: 2009-09-20 12:57:44
    学习
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #9 得分:0回复于: 2009-09-20 13:14:43
    引用 7 楼 citybird 的回复:
    class2里的class1_m1是class1里m1接口的实现,class3如果要继承class2里的class1_m1的话直接去实现class1里的m1接口好了。


    但是Class3就不能继承Class2里的实现了。

    打个比方说,Class1是动物类,有个方法叫做吃(M1);Class2是哺乳动物类,Class2继承吃的方法(Class1_M1),加入自己的实现“弄死了再吃”;Class3是人,它要继承吃的方法,比较省力的办法是继承Class2的“弄死了再吃”的步骤,自己再加一个语句叫“烧熟了再吃”就可以了。

    可是,在VB中并不支持这样的爷孙继承

    Class3如果直接继承Class2的话,它就不能继承Class2吃的方法。因为在Class2里,它继承的Class1的吃的方法是私有的(Private Sub Class1_M1)。所以,它只能直接继承Class1的M1方法,并且只好重复写上“弄死再吃”、然后加上“烧熟再吃”。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #10 得分:0回复于: 2009-09-20 13:21:16
    当然你可以试着把Class2里的Private Sub Class1_M1改成Public Sub Class1_M1。之后在Class3里再实现Class2的方法 Class1_M1,但是你会发现VB编译器会无法理解你的实现,因为你的实现现在叫Class2_Class1_M1,这个有二义性的名字会把VB编译器绕晕。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #11 得分:0回复于: 2009-09-20 13:24:25
    C2中实现的C1中的方法不能被公开,不支持多重继承关系,鄙视一下VB
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #12 得分:0回复于: 2009-09-20 13:40:31
    6.0无法实现
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #13 得分:3回复于: 2009-09-20 13:41:08
    引用 9 楼 slowgrace 的回复:
    但是Class3就不能继承Class2里的实现了。

    打个比方说,Class1是动物类,有个方法叫做吃(M1);Class2是哺乳动物类,Class2继承吃的方法(Class1_M1),加入自己的实现“弄死了再吃”;Class3是人,它要继承吃的方法,比较省力的办法是继承Class2的“弄死了再吃”的步骤,自己再加一个语句叫“烧熟了再吃”就可以了。

    可是,在VB中并不支持这样的爷孙继承。

    Class3如果直接继承Class2的话,它就不能继承Class2吃的方法。因为在Class2里,它继承的Class1的吃的方法是私有的(Private Sub Class1_M1)。所以,它只能直接继承Class1的M1方法,并且只好重复写上“弄死再吃”、然后加上“烧熟再吃”。

    这个问题虽然了解一些但是从来没在实际的项目中应用过,所以研究得不是很深,不知道能不能在Class2里面再加一个吃的方法(M1),Class3继承Class2的吃的方法(Class2_M1),并实现“烧熟了再吃”,这样Class3在Class2“弄死了再吃”的基础上再实现“烧熟了再吃”
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #14 得分:0回复于: 2009-09-20 14:08:42
    引用 13 楼 citybird 的回复:
    这个问题虽然了解一些但是从来没在实际的项目中应用过,所以研究得不是很深,不知道能不能在Class2里面再加一个吃的方法(M1),Class3继承Class2的吃的方法(Class2_M1),并实现“烧熟了再吃”,这样Class3在Class2“弄死了再吃”的基础上再实现“烧熟了再吃”


    这样做虽然可以,但是假如Class1的吃的方法有一个步骤“抓住一个动物再吃”,用你的方法就无法继承了。

    就是说,如果我希望既继承Class1的“抓住一个动物再吃”,也希望继承Class2的“弄死了再吃”,并且希望加上自己的“烧熟了再吃”,VB6是不支持的。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #15 得分:0回复于: 2009-09-20 21:48:36
    书上说了,不支持。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #16 得分:5回复于: 2009-09-26 09:31:24
    Implements与聚合配合是可以实现继承功能的.

    class1代码:
    Visual Basic code
    ?
    1
    2
    3
    4
    5
    Option Explicit
     
    Public Sub M1()
        Debug.Print "吃"
    End Sub

    class2代码:
    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    Implements Class1
    Private mobjClass1 As New Class1
     
    Public Sub M1()
        Call mobjClass1.M1
        Debug.Print "弄死再吃"
    End Sub
     
    Private Sub Class1_M1()
        Call M1
    End Sub

    class3代码:
    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    Implements Class1
    Private mobjClass2 As New Class2
     
    Public Sub M1()
        Call mobjClass2.M1
        Debug.Print "烧熟再吃"
    End Sub
     
    Private Sub Class1_M1()
        Call M1
    End Sub

    窗口代码:
    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    Option Explicit
     
    Private Sub Form_Load()
        Dim cls As New Class3
        Call cls.M1
    End Sub
    对我有用[1]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #17 得分:5回复于: 2009-09-26 09:49:34
    又完善了一下:

    Class1代码:
    Visual Basic code
    ?
    1
    2
    3
    4
    5
    Option Explicit
     
    Public Sub M1()
        Debug.Print "吃"
    End Sub

    Class2代码:
    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Implements Class1                   ' Class2实现了Class1的默认接口
    Private mobjClass1 As New Class1    ' Class2聚合了Class1的一个实例
     
    ' 调用基类方法,同时添加自己的内容
    Public Sub M1()
        Call mobjClass1.M1
        Debug.Print "弄死再吃"
    End Sub
     
    ' 实现基类接口
    Private Sub Class1_M1()
        Call M1
    End Sub

    Class3代码:
    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Option Explicit
    Implements Class1                   ' Class3实现了Class1的默认接口
    Implements Class2                   ' Class3实现了Class2的默认接口
    Private mobjClass2 As New Class2    ' Class3聚合了Class2的一个实例
     
    ' 调用基类方法,同时添加自己的内容
    Public Sub M1()
        Call mobjClass2.M1
        Debug.Print "烧熟再吃"
    End Sub
     
    ' 实现基类接口
    Private Sub Class1_M1()
        Call M1
    End Sub
     
    ' 实现基类接口
    Private Sub Class2_M1()
        Call M1
    End Sub

    Form1代码:
    Visual Basic code
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Option Explicit
     
    Private Sub Form_Load()
        Debug.Print vbCrLf & "p3->Class3"
        Dim p3 As Class3    ' Class3的默认接口
        Set p3 = New Class3 ' Class3对象
        Call p3.M1
         
        Debug.Print vbCrLf & "p2->Class3"
        Dim p2 As Class2    ' Class2接口
        Set p2 = New Class3 ' Class3对象
        Call p2.M1
         
        Debug.Print vbCrLf & "p1->Class3"
        Dim p1 As Class1    ' Class1接口
        Set p1 = New Class3 ' Class3对象
        Call p1.M1
         
        Debug.Print vbCrLf & "p2->Class2"
        Set p2 = New Class2 ' Class2对象
        Call p2.M1
         
        Debug.Print vbCrLf & "p1->Class2"
        Set p1 = New Class2 ' Class1对象
        Call p1.M1
         
        Debug.Print vbCrLf & "p1->Class1"
        Set p1 = New Class1 ' Class1对象
        Call p1.M1
    End Sub

    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #18 得分:0回复于: 2009-09-26 10:53:34
    做 QI 接口hook... 自己弄....
    多重接口继承好像是不支持.
    对我有用[1]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #19 得分:0回复于: 2009-09-26 13:15:41
    引用 16 楼 sonic_andy 的回复:
    Implements与聚合配合是可以实现继承功能的.

    class1代码:
    VB codeOptionExplicitPublicSub M1()
        Debug.Print"吃"End Sub
    class2代码:
    VB codeOptionExplicit
    Implements Class1Private mobjClass1AsNew Class1PublicSub M1()Call mobjClass1.M1
        Debug.Print"弄死再吃"End SubPrivateSub Class1_M1()Call M1End Sub
    class3代码:
    VB codeOptionExplicit
    Implements Class1Private mobjClass2AsNew Class2PublicSub M1()Call mobjClass2.M1
        Debug.Print"烧熟再吃"End SubPrivateSub Class1_M1()Call M1End Sub
    窗口代码:
    VB codeOptionExplicitPrivateSub Form_Load()Dim clsAsNew Class3Call cls.M1End Sub



    这方法不错,支持!
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #20 得分:0回复于: 2009-09-26 13:27:01
    聚合?aggregate
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #21 得分:0回复于: 2009-09-26 14:11:48
    引用 20 楼 slowgrace 的回复:
    聚合?aggregate

    其实是在用聚合模拟继承。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #22 得分:0回复于: 2009-09-27 21:34:07
    引用 21 楼 wangmu7206 的回复:
    引用 20 楼 slowgrace 的回复:
    聚合?aggregate

    其实是在用聚合模拟继承。

    是的,虽然稍微麻烦一些,但还是可以实现继承的特性的.
    原理是一样的,只是一个是编译器(或者运行环境)来实现的,一个是通过代码来实现的..
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #23 得分:2回复于: 2009-09-27 21:57:41
    Implements 语句
    指定要在包含该语句的类模块中实现的接口或类。
    语法
    Implements [InterfaceName | Class]
    所需的 InterfaceName 或 Class 是类型库中的接口或类的名称,该类型库中的方法将用与 Visual Basic 类中相一致的方法来实现。
    说明
    所谓接口就是代表接口封装的成员(方法以及属性)的原型集合;也就是说,它只包含成员过程的声明部分。一个类提供一个或多个接口的所有方法以及属性的一种实现方案。类的控制者每次调用函数时,该函数所执行的代码由类来提供。每个类至少应实现一个缺省接口。在 Visual Basic 中,一个已实现的接口中任何没有显式声明的成员都是缺省接口的隐式成员。
    当 Visual Basic 类实现接口时,都会提供该接口的类型库中说明的所有 Public 过程的版本。除了提供接口原型与自编过程之间的映射关系之外,Implements 语句还使这个类接收对指定接口 ID 的 COM QueryInterface 调用。

    注意 Visual Basic 不能实现派生出来的类或接口。


    在实现接口或类时,必须包括所用到的 Public 过程。如果在实现接口或类时遗漏了成员,就会产生错误。如果正在实现的类中某个过程还没有代码,则可以产生一个适当的错误信息 (Const E_NOTIMPL = &H80004001),以便用户意识到该成员还没有实现。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #24 得分:0回复于: 2009-09-27 23:05:43
    记下  Visual Basic 不能实现派生出来的类或接口。

    感觉也不是绝对的。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #25 得分:0回复于: 2009-09-28 11:03:57
    注意 Visual Basic 不能实现派生出来的类或接口。 

    Implements只是实现不是派生
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #26 得分:0回复于: 2009-09-28 11:23:02
    其实是在用聚合模拟继承啊。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #27 得分:0回复于: 2009-09-28 11:27:30
    印象中vb6好像不支持啊
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #28 得分:0回复于: 2009-09-28 11:29:49
    太棒了太棒了太棒了太棒了太棒了太棒了太棒了
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #29 得分:0回复于: 2009-09-28 12:00:37
    在Class3里继承Class2里的Class1_M1(
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #30 得分:0回复于: 2009-09-28 12:30:26
    手工收藏
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #31 得分:0回复于: 2009-09-28 12:31:54
    这样啊,不错啊,爽啊,我晕的啊
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #32 得分:0回复于: 2009-09-28 12:35:39
    dddddddddddddddddddddddd
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #33 得分:0回复于: 2009-09-28 12:49:38
    该回复于2009-09-28 14:23:05被版主删除
    编辑删除
    管理
    #34 得分:0回复于: 2009-09-28 13:07:32
    MARK
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #35 得分:0回复于: 2009-09-28 13:23:04
    Option Explicit
    Implements Class1                   ' Class3实现了Class1的默认接口
    Implements Class2                   ' Class3实现了Class2的默认接口
    Private mobjClass2 As New Class2    ' Class3聚合了Class2的一个实例
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #36 得分:0回复于: 2009-09-28 13:27:22
    看着vb就是不如vc舒服呢
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #37 得分:0回复于: 2009-09-28 13:41:58
    该回复于2009-09-29 09:21:51被版主删除
    编辑删除
    管理
    #38 得分:0回复于: 2009-09-28 13:42:29
    参考一下
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #39 得分:0回复于: 2009-09-28 14:15:59
    GOOD
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #40 得分:0回复于: 2009-09-28 15:34:09
    sdafsdfsdfdsf
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #41 得分:0回复于: 2009-09-28 16:13:01
    学习
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #42 得分:0回复于: 2009-09-28 17:04:48
    实现和继承是两种模型,实现的耦合度低容易控制,继承自动化程度高。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #43 得分:0回复于: 2009-09-28 17:48:35
    关注.
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    #44 得分:0回复于: 2009-09-28 18:01:48
    该回复于2009-09-29 10:20:43被版主删除
    编辑删除
    管理
    #45 得分:0回复于: 2009-09-28 18:08:01
    vb不支持,楼主别折腾了。
    对我有用[0]丢个板砖[0] 引用 | 举报 |
    编辑删除
    管理
    0 1
    原创粉丝点击