VB.Net - 类与对象

VB.Net - 类与对象

定义类时,可以为数据类型定义蓝图。 这实际上并不定义任何数据,但它定义了类名的含义,即类的对象将包含什么以及可以对这样的对象执行什么操作。

对象是类的实例。 构成类的方法和变量称为类的成员。

类的定义类的定义以关键字Class开头,后跟类名称; 和类体,由End Class语句结束。 以下是类定义的一般形式:

代码语言:txt复制[ ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _

Class name [ ( Of typelist ) ]

[ Inherits classname ]

[ Implements interfacenames ]

[ statements ]

End Classattributelist 属性列表:is a list of attributes that apply to the class. Optional. attributelist是一个适用于类的属性列表。 可选的。accessmodifier 访问修改器:defines the access levels of the class, it has values as - Public, Protected, Friend, Protected Friend and Private. Optional. accessmodifier定义类的访问级别,它的值为 - Public,Protected,Friend,Protected Friend和Private。 可选的。Shadows 阴影:indicate that the variable re-declares and hides an identically named element, or set of overloaded elements, in a base class. Optional. 阴影表示变量在基类中重新声明和隐藏一个同名的元素或一组重载的元素。 可选的。MustInherit:specifies that the class can be used only as a base class and that you cannot create an object directly from it, i.e., an abstract class. Optional. MustInherit指定该类只能用作基类,并且不能直接从它创建对象,即抽象类。 可选的。NotInheritable 不可继承:specifies that the class cannot be used as a base class. NotInheritable指定该类不能用作基类。Partial 部分:indicates a partial definition of the class. Partial表示类的部分定义。Inherits 继承:specifies the base class it is inheriting from. Inherits指定它继承的基类。Implements 实现:specifies the interfaces the class is inheriting from. Implements指定类继承的接口。下面的示例演示了一个Box类,它有三个数据成员,长度,宽度和高度:

代码语言:txt复制Module mybox

Class Box

Public length As Double ' Length of a box

Public breadth As Double ' Breadth of a box

Public height As Double ' Height of a box

End Class

Sub Main()

Dim Box1 As Box = New Box() ' Declare Box1 of type Box

Dim Box2 As Box = New Box() ' Declare Box2 of type Box

Dim volume As Double = 0.0 ' Store the volume of a box here

' box 1 specification

Box1.height = 5.0

Box1.length = 6.0

Box1.breadth = 7.0

' box 2 specification

Box2.height = 10.0

Box2.length = 12.0

Box2.breadth = 13.0

'volume of box 1

volume = Box1.height * Box1.length * Box1.breadth

Console.WriteLine("Volume of Box1 : {0}", volume)

'volume of box 2

volume = Box2.height * Box2.length * Box2.breadth

Console.WriteLine("Volume of Box2 : {0}", volume)

Console.ReadKey()

End Sub

End Module当上述代码被编译和执行时,它产生了以下结果:

代码语言:txt复制Volume of Box1 : 210

Volume of Box2 : 1560

成员函数和封装类的成员函数是一个函数,它的定义或其原型在类定义中像任何其他变量一样。 它对它所属的类的任何对象进行操作,并且可以访问该对象的类的所有成员。

成员变量是对象的属性(从设计角度),它们被保持为私有以实现封装。 这些变量只能使用public成员函数访问。

让我们把上面的概念设置并获得类中不同类成员的值:

代码语言:txt复制Module mybox

Class Box

Public length As Double ' Length of a box

Public breadth As Double ' Breadth of a box

Public height As Double ' Height of a box

Public Sub setLength(ByVal len As Double)

length = len

End Sub

Public Sub setBreadth(ByVal bre As Double)

breadth = bre

End Sub

Public Sub setHeight(ByVal hei As Double)

height = hei

End Sub

Public Function getVolume() As Double

Return length * breadth * height

End Function

End Class

Sub Main()

Dim Box1 As Box = New Box() ' Declare Box1 of type Box

Dim Box2 As Box = New Box() ' Declare Box2 of type Box

Dim volume As Double = 0.0 ' Store the volume of a box here

' box 1 specification

Box1.setLength(6.0)

Box1.setBreadth(7.0)

Box1.setHeight(5.0)

'box 2 specification

Box2.setLength(12.0)

Box2.setBreadth(13.0)

Box2.setHeight(10.0)

' volume of box 1

volume = Box1.getVolume()

Console.WriteLine("Volume of Box1 : {0}", volume)

'volume of box 2

volume = Box2.getVolume()

Console.WriteLine("Volume of Box2 : {0}", volume)

Console.ReadKey()

End Sub

End Module当上述代码被编译和执行时,它产生了以下结果:

代码语言:txt复制Volume of Box1 : 210

Volume of Box2 : 1560

构造函数和析构函数类构造函数是每当我们创建该类的新对象时执行的类的特殊成员子类。 构造函数具有名称New,并且没有任何返回类型。

下面的程序解释了构造函数的概念:

代码语言:txt复制Class Line

Private length As Double ' Length of a line

Public Sub New() 'constructor

Console.WriteLine("Object is being created")

End Sub

Public Sub setLength(ByVal len As Double)

length = len

End Sub

Public Function getLength() As Double

Return length

End Function

Shared Sub Main()

Dim line As Line = New Line()

'set line length

line.setLength(6.0)

Console.WriteLine("Length of line : {0}", line.getLength())

Console.ReadKey()

End Sub

End Class当上述代码被编译和执行时,它产生了以下结果:

代码语言:txt复制Object is being created

Length of line : 6默认构造函数没有任何参数,但如果需要,构造函数可以有参数。 这样的构造函数称为参数化构造函数。 此技术可帮助您在创建对象时为其分配初始值,如以下示例所示:

代码语言:txt复制Class Line

Private length As Double ' Length of a line

Public Sub New(ByVal len As Double) 'parameterised constructor

Console.WriteLine("Object is being created, length = {0}", len)

length = len

End Sub

Public Sub setLength(ByVal len As Double)

length = len

End Sub

Public Function getLength() As Double

Return length

End Function

Shared Sub Main()

Dim line As Line = New Line(10.0)

Console.WriteLine("Length of line set by constructor : {0}", line.getLength())

'set line length

line.setLength(6.0)

Console.WriteLine("Length of line set by setLength : {0}", line.getLength())

Console.ReadKey()

End Sub

End Class当上述代码被编译和执行时,它产生了以下结果:

代码语言:txt复制Object is being created, length = 10

Length of line set by constructor : 10

Length of line set by setLength : 6析构函数是一个类的特殊成员Sub,只要它的类的对象超出范围,它就被执行。

析构函数名为Finalize,它既不能返回值也不能接受任何参数。 析构函数在释放程序之前释放资源非常有用,比如关闭文件,释放内存等。

析构函数不能继承或重载。

下面的例子解释析构函数的概念:

代码语言:txt复制Class Line

Private length As Double ' Length of a line

Public Sub New() 'parameterised constructor

Console.WriteLine("Object is being created")

End Sub

Protected Overrides Sub Finalize() ' destructor

Console.WriteLine("Object is being deleted")

End Sub

Public Sub setLength(ByVal len As Double)

length = len

End Sub

Public Function getLength() As Double

Return length

End Function

Shared Sub Main()

Dim line As Line = New Line()

'set line length

line.setLength(6.0)

Console.WriteLine("Length of line : {0}", line.getLength())

Console.ReadKey()

End Sub

End Class当上述代码被编译和执行时,它产生了以下结果:

代码语言:txt复制Object is being created

Length of line : 6

Object is being deleted

VB.Net类的共享成员我们可以使用Shared关键字将类成员定义为静态。 当我们将一个类的成员声明为Shared时,意味着无论创建多少个对象,该成员只有一个副本。

关键字“共享”意味着类只存在一个成员实例。 共享变量用于定义常量,因为它们的值可以通过调用类而不创建它的实例来检索。

共享变量可以在成员函数或类定义之外初始化。 您还可以在类定义中初始化共享变量。

您还可以将成员函数声明为共享。 这样的函数只能访问共享变量。 共享函数甚至在创建对象之前就存在。

以下示例演示了共享成员的使用:

代码语言:txt复制Class StaticVar

Public Shared num As Integer

Public Sub count()

num = num + 1

End Sub

Public Shared Function getNum() As Integer

Return num

End Function

Shared Sub Main()

Dim s As StaticVar = New StaticVar()

s.count()

s.count()

s.count()

Console.WriteLine("Value of variable num: {0}", StaticVar.getNum())

Console.ReadKey()

End Sub

End Class当上述代码被编译和执行时,它产生了以下结果:

代码语言:txt复制Value of variable num: 3

继承面向对象编程中最重要的概念之一是继承。 继承允许我们根据另一个类来定义一个类,这使得更容易创建和维护应用程序。 这也提供了重用代码功能和快速实现时间的机会。

在创建类时,程序员可以指定新类应该继承现有类的成员,而不是编写完全新的数据成员和成员函数。 这个现有类称为基类,新类称为派生类。

基类和派生类:类可以从多个类或接口派生,这意味着它可以从多个基类或接口继承数据和函数。

VB.Net中用于创建派生类的语法如下:

代码语言:txt复制 Class

...

End Class

Class : Inherits

...

End Class考虑一个基类Shape和它的派生类Rectangle:

代码语言:txt复制' Base class

Class Shape

Protected width As Integer

Protected height As Integer

Public Sub setWidth(ByVal w As Integer)

width = w

End Sub

Public Sub setHeight(ByVal h As Integer)

height = h

End Sub

End Class

' Derived class

Class Rectangle : Inherits Shape

Public Function getArea() As Integer

Return (width * height)

End Function

End Class

Class RectangleTester

Shared Sub Main()

Dim rect As Rectangle = New Rectangle()

rect.setWidth(5)

rect.setHeight(7)

' Print the area of the object.

Console.WriteLine("Total area: {0}", rect.getArea())

Console.ReadKey()

End Sub

End Class当上述代码被编译和执行时,它产生了以下结果:

代码语言:txt复制Total area: 35

基类初始化派生类继承基类成员变量和成员方法。 因此,应该在创建子类之前创建超类对象。 超类或基类在VB.Net中被称为MyBase

以下程序演示了这一点:

代码语言:txt复制' Base class

Class Rectangle

Protected width As Double

Protected length As Double

Public Sub New(ByVal l As Double, ByVal w As Double)

length = l

width = w

End Sub

Public Function GetArea() As Double

Return (width * length)

End Function

Public Overridable Sub Display()

Console.WriteLine("Length: {0}", length)

Console.WriteLine("Width: {0}", width)

Console.WriteLine("Area: {0}", GetArea())

End Sub

'end class Rectangle

End Class

'Derived class

Class Tabletop : Inherits Rectangle

Private cost As Double

Public Sub New(ByVal l As Double, ByVal w As Double)

MyBase.New(l, w)

End Sub

Public Function GetCost() As Double

Dim cost As Double

cost = GetArea() * 70

Return cost

End Function

Public Overrides Sub Display()

MyBase.Display()

Console.WriteLine("Cost: {0}", GetCost())

End Sub

'end class Tabletop

End Class

Class RectangleTester

Shared Sub Main()

Dim t As Tabletop = New Tabletop(4.5, 7.5)

t.Display()

Console.ReadKey()

End Sub

End Class当上述代码被编译和执行时,它产生了以下结果:

代码语言:txt复制Length: 4.5

Width: 7.5

Area: 33.75

Cost: 2362.5 VB.Net支持多重继承。

相关探索

思维方法——STC算子法
365流水不够不能提现

思维方法——STC算子法

古墓丽影三部曲哪部最好玩 三部曲值得推荐的版本
365官网登录网址

古墓丽影三部曲哪部最好玩 三部曲值得推荐的版本