Public Class Person
Public Property FirstName As String
Public Property LastName As String
Public Overridable Sub Print() 'I will explain Overridable later.
Console.WriteLine($"{FirstName} {LastName}")
End Sub
End Class
现在可以声明Person类型的变量
Dim sue, pete As Person
Dim persons As List(Of Person)
sue = New Person()
sue.FirstName = "Susan"
sue.LastName = "Miller"
pete = New Person()
pete.FirstName = "Peter"
pete.LastName = "Smith"
persons = New List(Of Person)()
persons.Add(sue)
persons.Add(pete)
For Each person As Person In persons
person.Print()
Next
Public Class Employee
Inherits Person
Public Property Salary As Decimal
Public Overrides Sub Print
Console.WriteLine($"{FirstName} {LastName}, Salary = {Salary}")
End Sub
End Class
Imports System
Public Class Rectangle
Private length As Double
Private width As Double
'Public methods
Public Sub AcceptDetails()
length = 4.5
width = 3.5
End Sub
Public Function GetArea() As Double
GetArea = length * width
End Function
Public Sub Display()
Console.WriteLine("Length: {0}", length)
Console.WriteLine("Width: {0}", width)
Console.WriteLine("Area: {0}", GetArea())
End Sub
Shared Sub Main()
Dim r As New Rectangle()
r.Acceptdetails()
r.Display()
Console.ReadLine()
End Sub
End Class
5条答案
按热度按时间w8f9ii691#
class是一种类型,可以像其他类型(
String
、Integer
、Date
、FileInfo
...)一样使用该类型来声明变量、参数、属性和函数返回类型。让我们举一个小例子:
现在可以声明
Person
类型的变量而modules是静态的。即存储在模块中的数据只存在一次。另一方面,您不必使用
New
示例化模块,因此它们通常用于存储全局数据和全局可用的方法。例如,您可以将人员列表存储在模块中。但是,您可以使用类做更多的事情。您可以从基类派生类。这个新类继承基类的所有内容,并可以向其添加更多内容。例如,您可以从
Person
派生Employee
类Person.Print
中的Overridable
关键字允许派生类重新定义(覆盖)Print
方法。(类中的函数和子函数称为方法。)Employees与Persons的赋值兼容。您可以将一个Employee添加到
persons
列表中。这不需要在For Each循环中进行任何更改,即调用person.Print()
会自动调用正确的Print
方法(第一个方法用于“正常”人员,第二个方法用于Employees)。关于类还有很多要说的,我希望你对你能用类做什么有一定的了解。
参见Objects and classes in Visual Basic,特别是类和模块之间的差异一节。
zour9fqk2#
模块只不过是静态类的另一个名称。
这就是它的全部。
如果你不相信,用VB .NET编译一个模块,然后用ILSpy用C-Sharp反编译。
是的,这意味着你是正确的,就功能而言,模块是类的子集。
因此,在功能方面,类是模块的SUPERset,因为它可以包含静态和非静态方法和变量,以及虚拟和受保护的访问修饰符。
5sxhfpxr3#
类更像是一个单元,而模块本质上是函数、变量甚至类之类的松散集合。
在公共模块中,项目中的类可以访问模块的函数和变量。您不必指定模块名称来寻址。您也可以在模块中拥有类。
一个类的变量和函数由这个类更严格地“所有”。其他类使用的公共变量和函数(方法)与类名一起使用:
classname.method
,与模块中的不同。一个模块只有一个示例,但是一个类可以一次使用一个或多个示例。
2q5ifsrm4#
类和模块之间的主要区别是类可以示例化为对象,而标准模块不能。因为标准模块的数据只有一个副本,所以当程序的一部分更改标准模块中的公共变量时,程序的任何其他部分如果读取该变量,则会获得相同的值。相比之下,对象数据对于每个示例化的对象单独存在。另一个区别是,与标准模块不同,类可以实现接口。
来源:http://msdn.microsoft.com/en-us/library/7825002w(en-US,VS.80).aspx
doinxwow5#
实际上,你使用类来创建对象。例如在下面的.NET控制台应用程序中,
r
是一个Rectangle
对象: