MyException - 我的异常网
当前位置:我的异常网» VB » VB接口的使用步骤

VB接口的使用步骤

www.MyException.Cn  网友分享于:2015-08-17  浏览:0次
VB接口的使用方法

接口定义接口就是指只包含虚成员的虚类。

(1)虚类,表明了接口是不能够被直接实例化的。也就是说,接口只是一个抽象概念。比如我们说车可以跑,人可以跑,马可以跑。我们可以看到实例化的车、人、马。但是我们可以定义一个“会跑的物质”。它可以是车,也可以使人、马,但是我们却不能说“这个东西就是一个会跑得物质,但是它并不是车、人或者马。”

(2)只包含虚成员,表明了接口只是说明了它具有什么样的功能,可以提供什么样的信息。但是这些功能和信息究竟是什么,如何提供我们无法得知。就像是“会跑的物质”,我们知道它可以跑,但是具体他怎么跑我们就不知道了。之所以说接口可以部分替代多继承,就是因为VB.NET只允许一个类继承自另一个,且只能是这个类;但是一个类可以实现一个或多个接口。由于接口不实现成员,只声名成员,所以也就不存在多继承的路径问题了。

什么情况下使用接口: 

当我们面临一个问题,就是我们有一个功能,它需要操作不同的类的实例去完成一个目的相同的方法的时候,我们就可以把这些目的相同的方法作为接口来实现。这里我们就用橘子苹果的例子举例:

橘子苹果实例

功能分析:

有个只进不出的盒子,水果有两种苹果和香蕉,原始重量分别是50、30。放入盒中,水分丢失,重量减轻,分别减轻4、3,直到达到自身3/5不再轻。

盒子功能:

 1、一天前的总重量

 2、输出苹果数量

 3、输出橘子数量

 4、输出一天盒中水果减轻的总重量

 5、当前的总重量

这里主要用到的方法就是统计当前重量、统计减少重量。橘子和苹果都用到了这两个相同方法实现相同的目的。所以在这个例子中我们就把统计当前重量、统计减少重量这两个方法封装成了接口。这个例子是让苹果和橘子类去完成此接口(目的相同的方法),以实现软件最终的功能目的。

代码实现

 1、Furit接口提供的方法:统计当前重量、统计减少重量。

'******************************
'作者:周家林
'说明:Fruit接口
'日期:2015.8.16
'******************************
Public Property Get CurWeight() As Double   '方法:统计当前的重量
End Property

Public Function ReduceWeight() As Double    '方法:统计减少多少重量
End Function
2、Apple类实现接口
Implements Fruit
Private mvarCurWeight As Double           '定义当前重量的变量
Private MvarTotalWeight As Double         '定义总重量的变量

Private Sub Class_Initialize()            '类的初始化
                                          '苹果的初始化重量为50,当前的重量也是50
    MvarTotalWeight = 50
    mvarCurWeight = MvarTotalWeight
    
End Sub

Private Property Get Fruit_CurWeight() As Double    '写入苹果当前的重量

    Fruit_CurWeight = mvarCurWeight
    
End Property

Private Function Fruit_ReduceWeight() As Double     '苹果的重量每天减少4,直到是原始重量的3/5
    Dim oldWeight As Double                         '定义旧重量的变量
    oldWeight = mvarCurWeight                       '将减少前的重量值赋给旧重量
    
    mvarCurWeight = mvarCurWeight - 4               '苹果减重4
    If (mvarCurWeight < MvarTotalWeight * 3 / 5#) Then
    
        mvarCurWeight = MvarTotalWeight * 3 / 5     '苹果最低重量的整个的3/5
        
    End If
    
    Fruit_ReduceWeight = oldWeight - mvarCurWeight  '返回值是减少的重量=旧重量-新重量
    
End Function

3、Orange类实现接口
Implements Fruit
Private mvarCurWeight As Double           '定义当前重量的变量
Private MvarTotalWeight As Double         '定义总重量的变量

Private Sub Class_Initialize()            '类的初始化
                                          '橘子的初始化重量为50,当前的重量也是50
    MvarTotalWeight = 30
    mvarCurWeight = MvarTotalWeight
    
End Sub

Private Property Get Fruit_CurWeight() As Double    '写入橘子当前的重量

    Fruit_CurWeight = mvarCurWeight
    
End Property

Private Function Fruit_ReduceWeight() As Double     '橘子的重量每天减少3,直到是原始重量的3/5
    Dim oldWeight As Double                         '定义旧重量的变量
    oldWeight = mvarCurWeight                       '将减少前的重量值赋给旧重量
    
    mvarCurWeight = mvarCurWeight - 3               '橘子减重4
    If (mvarCurWeight < MvarTotalWeight * 3 / 5#) Then
    
        mvarCurWeight = MvarTotalWeight * 3 / 5     '橘子最低重量的整个的3/5
        
    End If
    Fruit_ReduceWeight = oldWeight - mvarCurWeight  '返回值是减少的重量=旧重量-新重量
End Function

4、FruitBox类是功能实现的一个类,此软件的功能全部都是在FruitBox类中的实现。
Private mcol As Collection                      '定义集合,元素是水果

Public Sub AddFruit(aFruit As Fruit)            '向盒子中添加一个水果
    mcol.Add aFruit
    
End Sub

Public Function TotalFruitWeight() As Double    '计算当前盒子水果的总重量
    Dim aFruit As Fruit
    Dim total As Double
    
    total = 0
    For Each aFruit In mcol
        total = total + aFruit.CurWeight
    Next
    
    TotalFruitWeight = total                    '函数返回值是所有的总重量
    
End Function

Public Function PassOneDay() As Double          '经过一天后盒子的重量
    Dim aFruit As Fruit
    Dim total As Double
    
    total = 0
    For Each aFruit In mcol
    
        total = total + aFruit.ReduceWeight     '所有水果减轻的重量
        
    Next
    
    PassOneDay = total                          '函数返回值是所有的总重量
    
End Function

Public Function NumOfApples() As Long           '盒子里面苹果的个数
    Dim aFruit As Fruit
    Dim count As Long
    
    count = 0
    For Each aFruit In mcol
        If (TypeName(aFruit) = "Apple") Then
        
            count = count + 1
        End If
        
    Next
    
    NumOfApples = count
    
    
End Function

Public Function NumOfOranges() As Long          '盒子里面橘子的个数
    Dim aFruit As Fruit
    Dim count As Long
    
    count = 0
    For Each aFruit In mcol
        If (TypeName(aFruit) = "Orange") Then
        
            count = count + 1
        End If
        
    Next
    
    NumOfOranges = count
    
    
End Function

Private Sub Class_Initialize()                  '初始化建立集合

    Set mcol = New Collection

End Sub

Private Sub Class_Terminate()                   '清理内存,释放集合对象
    ReleaseFruits
    Set mcol = Nothing

End Sub

Private Sub ReleaseFruits()                     '释放对象
    Dim aFruit As Fruit

    For Each aFruit In mcol

        Set aFruit = Nothing

    Next

End Sub

5、主窗体实例化,主窗体通过调用FuritBox里的具体功能方法,来实现主窗体具体操控功能。然后将整个系统运算的结果呈现到主窗体上Text中,供用户查看。
Dim Box As Fruitbox                             '定义一个盒子类型
Private Sub cmdApple_Click()                 '添加一个苹果
    Box.AddFruit New Apple
End Sub
Private Sub cmdOrange_Click()                '添加一个橘子
    Box.AddFruit New Orange
End Sub
Private Sub cmdPassDay_Click()                  '过了一天统计
    Dim str As String                           '定义字符串变量
    Dim Old As Double                           '定义旧重量变量
    Dim Reduce As Double                        '定义损失重量变量
    Dim Now As Double                           '定义新重量变量
    
    Old = Box.TotalFruitWeight()                '调用FruitBox类的TotalFruitWeight方法
    str = "一天前总重量有:" & Old
    LstShow.AddItem str
    
    str = "苹果有:" & Box.NumOfApples()        '调用FruitBox类的NumOfApples方法
    LstShow.AddItem str
    
    str = "橘子有:" & Box.NumOfOranges()       '调用FruitBox类的NumOfOranges方法
    LstShow.AddItem str
    
    Reduce = Box.PassOneDay                     '调用FruitBox类的PassOneDay方法
    str = "一天损失重量:" & Reduce
    LstShow.AddItem str
    
    Now = Box.TotalFruitWeight()                '调用FruitBox类的TotalFruitWeight方法
    str = "当前重量:" & Now
    LstShow.AddItem str
    LstShow.AddItem ""
End Sub
Private Sub Form_Load()                         '创建一个盒子对象
    Set Box = New Fruitbox
End Sub
Private Sub Form_Unload(Cancel As Integer)      '释放一个盒子对象
    Set Box = Nothing
End Sub

小结】当我们操作不同的类的实例去完成一个目的相同的方法的时候,我们就可以把这些目的相同的方法作为接口来实现。接口其实就是目的相同的方法的集合。我感觉通过这个具体的实例及代码我们可以对接口理解的更深刻一些。

版权声明:本文为博主原创文章,未经博主允许不得转载。

文章评论

程序员都该阅读的书
程序员都该阅读的书
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
Java程序员必看电影
Java程序员必看电影
如何成为一名黑客
如何成为一名黑客
鲜为人知的编程真相
鲜为人知的编程真相
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
代码女神横空出世
代码女神横空出世
 程序员的样子
程序员的样子
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
一个程序员的时间管理
一个程序员的时间管理
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
那些争议最大的编程观点
那些争议最大的编程观点
编程语言是女人
编程语言是女人
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员必看的十大电影
程序员必看的十大电影
漫画:程序员的工作
漫画:程序员的工作
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员应该关注的一些事儿
程序员应该关注的一些事儿
每天工作4小时的程序员
每天工作4小时的程序员
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
10个调试和排错的小建议
10个调试和排错的小建议
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员的鄙视链
程序员的鄙视链
我的丈夫是个程序员
我的丈夫是个程序员
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
我是如何打败拖延症的
我是如何打败拖延症的
中美印日四国程序员比较
中美印日四国程序员比较
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员和编码员之间的区别
程序员和编码员之间的区别
旅行,写作,编程
旅行,写作,编程
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
总结2014中国互联网十大段子
总结2014中国互联网十大段子
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有