vb.net接口继承 vb 继承( 九 )


Public Function ReplaceAll() As StringmstrOriginal = MyBase LineReturn MyBase Line Replace( mstrDelim ToChar())End Function
ReplaceAll 方法通过基类的 Line 方法检索原始文本行 而以前从基类中检索属性时使用的是 MyBase Line 语法 ReplaceAll 函数将 MyBase Line 属性的值放入您刚刚为该类创建的 Private 变量 mstrOriginal 中 String 数据类型的 Replace 方法将字符串字符的所有实例替换为在 Delimiter 属性中设置的新分隔符字符 mstrDelimMyBase 关键字 可以从任一子类使用 MyBase 关键字 以调用基类中的任何属性或方法 即使基类的方法在子类中已被覆盖 您也可以使用该关键字对其进行调用 例如 如果在基类中存在 ReplaceAll 方法 但在子类中该方法已被覆盖 您可以从子类的 ReplaceAll 方法中调用基类的 ReplaceAll 方法
试一试打开 frmLineTest VB 窗体 双击 Replace(替换)以调出单击事件过程 在 btnReplace 按钮的单击事件中编写以下代码
Protected Sub btnReplace_Click( _ ByVal sender As Object _ByVal e As System EventArgs) Handles btnReplace ClickDim oLine As LineDelim = New LineDelim()oLine Delimiter = txtDelim TextoLine Line = txtLine TexttxtReplace Text = oLine ReplaceAll()End Sub
此代码将 Delimiter 属性设置为在示例窗体的 txtDelimiter 文本框中输入的值 然后您可以调用 ReplaceAll 方法 将文本行中的所有空格更改为新的分隔符字符
按 F 键运行该项目 单击 Replace(替换) 您将看到 在此按钮旁边的文本框中 句中的每个词之间都有一个逗号覆盖方法 添加 Delimiter 属性后 您可能想更改 LineDelim 类中的 GetWord 方法 以便使用相应的分隔符替代 Line 类使用的单个空格 因为您不一定想更改基类 所以需要覆盖 LineDelim 类中 GetWord 方法的功能 在 LineDelim 类中创建新的 GetWord 方法之前 您需要在 Line 类的 GetWord 方法声明中添加一个关键字
在 Solution Explorer(解决方案资源管理器)窗口中 打开 Line vb 类的代码窗口 找到 GetWord 方法的声明(声明不包含参数) 如下所示 Public Overloads Function GetWord() As String在函数声明中添加关键字 Overridable 如下所示(没有此关键字 就无法覆盖此方法) Public Overridable Overloads Function GetWord() As String打开 LineDelim vb 类 并使用如下代码添加新的 GetWord 方法
Public Overloads Overrides Function GetWord() As StringDim astrWords() As StringastrWords = MyBase Line Split(mstrDelim ToCharArray())Return astrWords( )End Function
如果要更改基类中方法的功能 则有必要在函数声明中添加 Overrides 关键字 现在 LineDelim 类中的 GetWord 方法就可以使用 Delimiter 属性的值来分隔句中的词
如果只覆盖其中一个 GetWord 方法 则代码只能查看这一个版本的方法 而无法调用其他版本的 GetWord 方法 要显示所有方法 您必须覆盖每一个方法 就象您在 LineDelim 类中所执行的操作一样
试一试按 F 键运行该项目 在句中的每个词之间都输入一个逗号 并在 Delimiter(分隔符)文本框中输入一个逗号 单击 Get Word(取词) 句中的第一个词将出现在该按钮旁边的文本框中
抽象类在本文上一部分的示例中 我们学习了如何创建 Person 对象 这是因为我们想处理普通的人 但是您可能会发现 如果不先添加一些特定的行为和/或数据 就无法使用 Person 类执行任何操作 因此您可以将 Person 类变为抽象类 抽象类仅定义将由子类创建的一般属性和方法
将 Person 类定义为只能被继承的抽象类 而不是在运行时实际创建的对象 从该类继承的每个类(如 Employee 类)都将使用特定的功能来创建所有相应的属性和方法 例如 Employee 类将创建实际的 Print 方法 而 Person 类仅定义必须存在 Print 方法 Person 类中没有与 Print 方法相关联的代码 使用抽象类的原因有多种 对于强制子类设计人员实现应用程序通常所需的所有接口 抽象类非常有用 您可以在不破坏客户端应用程序的情况下向子类添加新方法 这是使用接口所无法实现的 可以在基类中提供许多默认实现方法 从而减少子类需要完成的工作量

推荐阅读