打印本文 打印本文 关闭窗口 关闭窗口
Microsoft .NET 中的基类继承
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2388  更新时间:2009/4/23 16:39:33  文章录入:mintao  责任编辑:mintao

使用抽象类的原因有多种。对于强制子类设计人员实现应用程序通常所需的所有接口,抽象类非常有用。您可以在不破坏客户端应用程序的情况下向子类添加新方法,这是使用接口所无法实现的;可以在基类中提供许多默认实现方法,从而减少子类需要完成的工作量。

接口继承

创建抽象类时,请使用关键字 Interface 而不是 Class。为接口命名,然后定义需要子类实现的所有属性和方法。这是因为基类中没有可以实现的属性和方法,它只包含一般数据,而不包含方法。您所创建的只是一个合约,它规定所有使用此接口的子类都必须遵循一定的规则。

  1. 现在,请在已创建的项目中添加一个新类。
  2. 从 Visual Studio 菜单中,单击 Project(项目),然后单击 Add Class(添加类)。
  3. 在类中添加以下代码:
    Interface Person
        Property FirstName() As String
        Property LastName() As String
        
        Sub Print()
        Sub Talk()
    End Interface

    您会发现,您定义属性和子过程的方法与您通常定义这些属性和过程的方法一样。唯一的差别在于,您没有为它们编写任何代码。现在来看看如何在类定义中使用此接口。

  4. 在上一步骤创建的类文件中添加以下代码:
    Public Class Employee
        Implements Person
        
        Private mstrFirstName As String
        Private mstrLastName As String
        
        Property FirstName() As String _
         Implements Person.FirstName
            Get
                Return mstrFirstName
            End Get
            Set
                mstrFirstName = Value
            End Set
        End Property
        
        Property LastName() As String _
         Implements Person.LastName
            Get
                Return mstrLastName
            End Get
            Set
                mstrLastName = Value
            End Set
        End Property
        
        Sub Print() Implements Person.Print
            '''' 在此处添加一些代码        
        End Sub
    
        Sub Talk() Implements Person.Talk
            '''' 在此处添加一些代码
        End Sub
    End Class

在 Employee 类定义之后的第一行是 Implements Person。此关键字表示您要遵守 Person 接口中定义的合约。现在您可以定义该合约中的所有属性和方法。在每一个 Property 语句后面,都必须包含 Implements 关键字,并且必须指定接口的名称和您正在使用的方法/属性的名称(两个名称之间有一个点 [.])。Visual Basic .NET 将跟踪每一个接口,在所有接口创建完毕之前,您不能编译应用程序。

如果要运行代码,则需要创建相应的子过程,因为在上面的示例中这些子过程被保留为空。创建所有子过程后,您就可以与您通常创建并使用任何其他对象一样,声明并使用新的 Employee 对象了。

选择要使用的继承类型

有时候很难决定到底是使用实现继承还是使用接口继承,很多情况下,可能两种继承都会用到,但都只涉及一小部分。例如,您可能需要在 Line 类中添加必须被子类覆盖的方法定义,在过程定义中使用 MustOverride 关键字即可实现此操作。

Public MustOverride Sub Init()

将此定义添加到类中以后,其作用类似于一个接口。在子类中,必须定义 Init 方法,并且该方法必须使用 Overrides 关键字。以下是如何定义 Init 方法的示例:

Public Overrides Sub Init()
   mstrDelim = " "
   mstrLine = "测试行"
End Sub

同样,请记住使用 Overrides 关键字。该关键字用于通知编译器此方法将覆盖父类中的 Init 方法。

注意: Microsoft .NET 框架的联机帮助中提供了设计指南,可以帮助您决定要使用的继承类型。

阻止继承

在某些情况下,您可能不希望其他类继承您的类。如果是这样,您可以使用关键字 NotInheritable 来阻止类的继承。

Public Class NotInheritable Employee
   '''' 类定义
End Class

Visual Basic 6.0 以来的新增功能

使用 Visual Basic .NET,您可以继承 .NET 框架包含的所有类。您可以创建自己的类,使这些类继承现有的类;并通过对代码进行简单更改来添加或删除功能。

总结

本文介绍了如何继承基类,如何向基类添加其他属性,以及如何使用 Overrides 关键字来替换基类中定义的功能。还介绍了使用 MyBase 关键字调用基类中的方法,从而扩展基类的功能。虽然继承并不是对所有的应用程序都适用,但如果使用正确,继承将成为一种非常强大的工具。

关于作者

Paul D. Sheriff 是 PDSA, Inc. 的所有者。该公司位于南加利福尼亚州,是一家自定义软件开发和咨询公司。Paul 是南加利福尼亚的 MSDN 区域总监,著有《Paul Sheriff Teaches Visual Basic》一书,他为 Keystone Learning Systems 制作了 70 多套关于 Visual Basic、SQL Server、.NET 和 Web 开发的视频教材,最近还将与 Ken Getz 合作出版一本关于 SAMS 的书,书名是《ASP.NET Jumpstart》。有关详细信息,请访问 PDSA, Inc. 的 Web 站点 www.pdsa.com。

关于 Informant Communications Group

Informant Communications Group, Inc. 是一家专注于信息技术行业的多媒体公司。它成立于 1990 年,专门从事软件开发出版物、会议、目录发布和 Web 站点等业务。ICG 在美国和英国均设有办事处,目前已成为享有盛誉的媒体和营销内容集成商,并以高质量的技术信息满足 IT 人员不断增长的需求。

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口