转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
Microsoft .NET 中的基类继承         ★★★★
Label Name Label1   Text Line of Text TextBox Name txtLine   Text The rain in Spain stays mainly in the plain TextBox Name txtDelim   Text , GroupBox Name fraWord   Text Get First Word CommandButton Name btnFirst   Text Get Word TextBox Name txtFirstWord   Text     ReadOnly True CommandButton Name btnReplace   Text Replace TextBox Name txtReplace   Text     ReadOnly True

构建 Line 类

接下来将构建要继承的 Line 类。

  1. 从菜单中单击 Project(项目),然后单击 Add Class(添加类)。
  2. 键入如下所示的代码。
    Public Class Line
        Private mstrLine As String
        
        Property Line() As String
            Get
                Return mstrLine
            End Get
            Set(ByVal Value As String)
                mstrLine = Value
            End Set
        End Property
        
        ReadOnly Property Length() As Integer
            Get
                Return mstrLine.Length
            End Get
        End Property
        
        Public Function GetWord() As String
            Dim astrWords() As String
            
            astrWords = mstrLine.Split(" ".ToCharArray())
            
            Return astrWords(0)
        End Function
    End Class
    

创建子类

既然窗体和基类都已经创建完毕,现在便可以开始执行继承了。

  1. 单击 Project(项目),然后单击 Add Class(添加类)。将该类命名为 LineDelim.vb 并单击 OK(确定)。
  2. 添加新类时,请修改 Visual Basic .NET 所创建的代码,使之与下面的示例代码相似。
    Public Class LineDelim
        Inherits Line
    
    End Class

因为添加了 Inherits Line 语句,所以您可以在这一新创建的类中使用 Line 类的所有属性和方法。

试一试

  1. 打开 frmLineTest.vb 窗体。
  2. 双击 Get Word(取词)按钮。
  3. 向此按钮的单击事件过程添加以下代码:
    Protected Sub btnFirst_Click(ByVal sender As Object, _
     ByVal e As System.EventArgs) Handles btnFirst.Click
        Dim oLine As LineDelim = New LineDelim()
          
        oLine.Line = txtLine.Text
        txtFirstWord.Text = oLine.GetWord()
    End Sub
  4. 运行项目,并在窗体上单击 Get Word(取词)按钮。您将看到“The”一字出现在按钮旁边的只读文本框中。

Inherits 语句的功能非常强大,只需要使用这一个语句,就可以在 LineDelim 类中使用 Line 类的所有属性和方法。尽管这个新类尚未执行任何新的操作,但它却表明从 Line 类中继承的所有代码都可以正常工作。

添加其他功能

现在,您可以使用其他属性和方法对 LineDelim 类进行扩展。要向 LineDelim 类添加两个新的属性,请执行以下步骤。

  1. 在上一部分添加的 Inherits 语句后添加两个 Private 变量,如下所示。
    Private mstrDelim As String = " "
    Private mstrOriginal As String
  2. 键入如下代码,为这两个 Private 变量添加适当的 Property 语句。您可以将以下代码放在上面输入的两行代码后面(紧挨这两行)。
    Public Property Delimiter() As String
        Get
            Return mstrDelim
        End Get
        Set(ByVal Value As String)
            mstrDelim = Value
        End Set
    End Property
       
    Public ReadOnly Property OriginalLine() As String
        Get
            Return mstrOriginal
        End Get
    End Property

现在您可以使用 Delimiter 属性设置并获取 Private 变量 mstrDelim 的值。

如果不希望其他人更改这些属性,您可以将属性设为只读。要执行此操作,请不再使用 Set 语句,并在 Property 语句中添加 ReadOnly 属性。有关示例,请参见上面代码中显示的 OriginalLine 属性声明。

接下来,需要创建一个称为 ReplaceAll 的方法,此方法可以将文本行中的所有空格替换为传递到 Delimiter 属性中的分隔符字符。

Public Function ReplaceAll() As String
    mstrOriginal = MyBase.Line
      
    Return MyBase.Line.Replace(" ", mstrDelim.ToChar())
End Function

ReplaceAll 方法通过基类的 Line 方法检索原始文本行。而以前从基类中检索属性时使用的是 MyBase.Line 语法。ReplaceAll 函数将 MyBase.Line 属性的值放入您刚刚为该类创建的 Private 变量 mstrOriginal 中。String 数据类型的 Replace 方法将字符串字符的所有实例替换为在 Delimiter 属性中设置的新分隔符字符 mstrDelim。

MyBase 关键字

可以从任一子类使用 MyBase 关键字,以调用基类中的任何属性或方法。即使基类的方法在子类中已被覆盖,您也可以使用该关键字对其进行调用。例如,如果在基类中存在 ReplaceAll 方法,但在子类中该方法已被覆盖,您可以从子类的 ReplaceAll 方法中调用基类的 ReplaceAll 方法。

试一试

  1. 打开 frmLineTest.vb 窗体。
  2. 双击 Replace(替换)以调出单击事件过程。
  3. btnReplace 按钮的单击事件中编写以下代码:
    Protected Sub btnReplace_Click( _ 
     ByVal sender As Object, _
     ByVal e As System.EventArgs) Handles btnReplace.Click
        Dim oLine As LineDelim = New LineDelim()
          
        oLine.Delimiter = txtDelim.Text
        oLine.Line = txtLine.Text
        txtReplace.Text = oLine.ReplaceAll()
    End Sub

    此代码将 Delimiter 属性设置为在示例窗体的 txtDelimiter 文本框中输入的值。然后您可以调用 ReplaceAll 方法,将文本行中的所有空格更改为新的分隔符字符。

  4. F5 键运行该项目。
  5. 单击 Replace(替换)。您将看到,在此按钮旁边的文本框中,句中的每个词之间都有一个逗号。

覆盖方法

添加 Delimiter 属性后,您可能想更改 LineDelim 类中的 GetWord 方法,以便使用相应的分隔符替代 Line 类使用的单个空格。因为您不一定想更改基类,所以需要覆盖 LineDelim 类中 GetWord 方法的功能。在 LineDelim 类中创建新的 GetWord 方法之前,您需要在 Line 类的 GetWord 方法声明中添加一个关键字。

  1. Solution Explorer(解决方案资源管理器)窗口中,打开 Line.vb 类的代码窗口。
  2. 找到 GetWord 方法的声明(声明不包含参数),如下所示:
    Public Overloads Function GetWord() As String
  3. 在函数声明中添加关键字 Overridable,如下所示(没有此关键字,就无法覆盖此方法)。
    Public Overridable Overloads Function GetWord() As String
  4. 打开 LineDelim.vb 类,并使用如下代码添加新的 GetWord 方法。
    Public Overloads Overrides Function GetWord() As String
        Dim astrWords() As String
          
        astrWords = MyBase.Line.Split(mstrDelim.ToCharArray())
          
        Return astrWords(0)
    End Function

如果要更改基类中方法的功能,则有必要在函数声明中添加 Overrides 关键字。现在,LineDelim 类中的 GetWord 方法就可以使用 Delimiter 属性的值来分隔句中的词。

如果只覆盖其中一个 GetWord 方法,则代码只能查看这一个版本的方法,而无法调用其他版本的 GetWord 方法。要显示所有方法,您必须覆盖每一个方法,就象您在 LineDelim 类中所执行的操作一样。

试一试

  1. F5 键运行该项目。
  2. 在句中的每个词之间都输入一个逗号,并在 Delimiter(分隔符)文本框中输入一个逗号。
  3. 单击 Get Word(取词)。

    句中的第一个词将出现在该按钮旁边的文本框中。

抽象类

在本文上一部分的示例中,我们学习了如何创建 Person 对象,这是因为我们想处理普通的人。但是您可能会发现,如果不先添加一些特定的行为和/或数据,就无法使用 Person 类执行任何操作。因此您可以将 Person 类变为抽象类,抽象类仅定义将由子类创建的一般属性和方法。

将 Person 类定义为只能被继承的抽象类,而不是在运行时实际创建的对象。从该类继承的每个类(如 Employee 类)都将使用特定的功能来创建所有相应的属性和方法。例如,Employee 类将创建实际的 Print 方法,而 Person 类仅定义必须存在 Print 方法;Person 类中没有与 Print 方法相关联的代码。

[1] [2]  下一页


[C语言系列][C#防止反编译].NET 产品版权保护方案 (.NET源码加…  [C语言系列]NET 中C#的switch语句的语法
[互联动态].NETFramework3.0新特性介绍与问答翻译  [Web开发]asp.net代码空格显示为……点号的原因及解决办法
[Web开发]asp.net调用压缩软件对文件进行压缩与解压缩的代码  [Web开发]详细介绍asp.net获取日期时间的各种格式的函数
[Web开发]如何将JS文件编译到ASP.NET项目里的DLL文件中  [Web开发]asp.net加密口令的最简单方法
[Web开发]目前asp.net开发主流工具软件介绍  [Web开发]asp.net中的反射介绍

Microsoft .NET 中的基类继承

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1957 更新时间:2009/4/23 16:39:33
Microsoft .NET 中的基类继承
升级到 Microsoft .NET
Paul D. Sheriff
PDSA, Inc.
2001 年 12 月

摘要:本文介绍了继承,说明了如何继承基类,并且介绍了 Microsoft .NET 中的实现继承和接口继承。

目标

  • 继承概述
  • 了解如何继承基类
  • 了解接口继承
  • 了解实现继承

前提条件

要彻底理解本文内容,需要满足以下条件:

  • 了解基本编码
  • 了解类及其工作原理,或者阅读过 Creating Classes in .NET(英文)一文
  • 可以使用 Microsoft® Visual Basic® .NET

目录

  • 继承概述
  • 继承基类
  • 构建示例窗体
  • 创建子类
  • 添加其他功能
  • MyBase 关键字
  • 抽象类
  • 选择要使用的继承类型
  • Visual Basic 6.0 以来的新增功能
  • 总结

继承概述

面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。在 Microsoft® Visual Basic® .NET 发布之前,Visual Basic 程序员并不具备这种能力。在 Visual Basic .NET 中,您可以继承 Microsoft .NET 框架中的类,也可以继承您自己创建的类。在本文中,我们将学习如何使用继承,并了解继承是如何大大缩短编程时间的。

简单示例

在您创建的许多类中,您会发现您常常需要与先前创建的类中的属性和方法相同的属性和方法。例如,如果有一个名为 Person 类的基类,该类包含 LastNameFirstName 属性以及 Print 方法,您会发现对于 Employee 类您也需要这些属性和方法。您可能还需要其他属性,例如 EmployeeID 和 Salary。如果从 Person 类(基类)继承,您可以将这些属性添加到新的 Employee 类中,并且仍然可以访问 Person 类中的所有属性。继承是指某个类可将其自身定义为具有某个特定类的所有属性和方法,然后再通过添加其他属性和方法对基类的定义进行扩展的能力。

继承术语

在深入研究这个主题之前,让我们先来定义几个术语。通过继承创建的新类称为“子类”,被继承的类称为“基类”、“父类”或“超类”。在某些 OOP 语言中,一个子类可以继承多个基类。也就是说,如果有一个 Person 类和一个 Car 类,则 Driver 类可以继承这两个类的所有属性和方法。而在 .NET 中,只允许单一继承,因此每个子类只能有一个基类。

.NET 支持三类继承:实现继承、接口继承和可视继承。实现继承是指使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。

在 .NET 中,一个类可以从某个基类继承而来,而这个基类又可以从另外一个类继承而来。而且,您可以在一个类中使用一个或多个接口。

使用继承的原因

继承可以避免重复编写相同的代码,因此十分有用。如果有两个单独的类,而每个类都必须实现 FirstNameLastName 属性,则可能会出现重复代码。如果要更改某个属性的实现方式,则需要查找已实现这些属性的所有类以进行更改。这不仅要耗费大量时间,还增加了不同类中出现错误的风险。

在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。

覆盖

从基类中继承功能时,您可能会发现在基类中编写的一般方法仅执行继承类所需的部分功能。要执行所需的全部功能,您可以在新类中覆盖基类的方法,而无需使用新的名称创建一个全新的方法。

进行覆盖时,您可以选择完全覆盖基类的方法,也可以在继承类中编写代码来执行某些操作,然后再调用基类的方法。在覆盖时,请务必仍然使用与原始方法相同的合约(参数和返回类型)。也可以选择先调用基类的方法,然后在执行完基类的方法后编写其他代码。

继承基类

继承使您可以在一个类中使用另一个类的全部属性和方法。您可以使用关键字 Inherits 来获得基类的功能,而无需将代码从一个类复制并粘贴到另一个类中。

实现继承

本文将创建一个新类 LineDelim,它将继承 Creating Classes in .NET(英文)一文中创建的 Line 类的所有功能。之后,本文将通过添加两个其他属性和一个方法对 Line 类进行扩展。要添加的第一个属性是 Delimiter,使用它可以获得一个分隔符字符,并将其设置到类中。此分隔符将用于将行中的所有空格替换为分隔符字符。要添加的第二个属性是 OriginalLine,它将用于在向文本行插入新的分隔符之前保留文本的原始行。要创建的新方法是 ReplaceAll(),它将用于将文本行中的所有空格替换为分隔符字符。然后我们将学习如何覆盖 GetWord 方法,以便使用此分隔符(而不是空格)分隔文本行并搜索第一个词。

构建示例窗体

图 1 中显示的示例窗体将用来测试要创建的继承类。

图 1:用于测试继承的示例窗体

  1. 要创建图 1 所示的窗体,请单击 Project(项目),然后单击 Add Windows Form(添加 Windows 窗体)。
  2. 将窗体命名为 frmLineTest.vb 并单击 OK(确定)。
  3. 然后在该窗体上创建相应的控件并设置属性,如表 1 所示。

    表 1:用于测试继承的窗体

控件 属性
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台