Ste*_*hen 13 vb.net visual-studio
在Visual Studio中向VB.Net项目添加新文件时,我可以选择"类"和"模块".一个类被描述为
An empty class file
Run Code Online (Sandbox Code Playgroud)
虽然模块被描述为
A file for storing groups of functions
Run Code Online (Sandbox Code Playgroud)
这似乎意味着模块对类的用处不太重要,因为类可以存储函数组等等.
是模块只是一组函数,还是视觉工作室文档建议的模块更多?
Oli*_*bes 14
甲类是一种类型.您可以使用此类型的像任何其他类型的(String
,Integer
,Date
,FileInfo
...)声明变量,参数,属性和函数返回类型.
让我们举一个例子:
Public Class Person
Public Property FirstName As String
Public Property LastName As String
Public Overridable Sub Print() 'I'll explain Overridable later.
Console.WriteLine("{0} {1}", FirstName, LastName)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
现在您可以声明类型的变量 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
Run Code Online (Sandbox Code Playgroud)
而模块是静态的.即存储在模块中的数据只存在一次.另一方面,您不必使用实例化模块New
,因此它们通常用于存储全局数据和全局可用的方法.例如,您可以将人员列表存储在模块中.
但是你可以用课程做更多的事情.您可以从基类派生一个类.这个新类继承了基类的所有内容,可以为它添加更多内容.例如,您可以从中派生出一个Employee
类Person
Public Class Employee
Inherits Person
Public Property Salary As Decimal
Public Overrides Sub Print
Console.WriteLine("{0} {1}, Salary = {2}", FirstName, LastName, Salary)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
的Overridable
在关键字Person.Print
允许派生类重新定义(重写)的Print
方法.(类中的函数和子类称为方法.)
员工与人员兼容.您可以将员工添加到persons
列表中.这不需要For Each循环中的任何更改,即person.Print()
自动调用正确Print
方法的调用(第一个用于"普通"人员,第二个用于员工).
Dim emp as Employee
emp = New Employee()
emp.FirstName = "Frank"
emp.LastName = "Taggart"
emp.Salary = 3500.00D
persons.Add(emp)
Run Code Online (Sandbox Code Playgroud)
关于课程还有很多话要说.我希望您对课程能做些什么有所了解.
类更像是一个单元,模块本质上是函数,变量甚至类等东西的松散集合.
在公共模块中,项目中的类可以访问模块的函数和变量.您不必指定模块名称来解决问题.您还可以在模块中使用类.
班级的变量和功能受到班级更严格的"所有权".其他类使用的公共变量和函数(方法)与classname:一起使用classname.method
,与模块中的不同.
模块只有一个实例,但一次可以使用一个或多个类的实例.
类和模块之间的主要区别在于,类可以实例化为对象,而标准模块则不能。由于标准模块的数据只有一份副本,因此当程序的一部分更改标准模块中的公共变量时,程序的任何其他部分如果随后读取该变量,则会获得相同的值。相反,对象数据针对每个实例化对象单独存在。另一个区别是,与标准模块不同,类可以实现接口。
来源:http ://msdn.microsoft.com/en-us/library/7825002w(en-US,VS.80).aspx
模块只不过是静态类的另一个名称.
这里的所有都是它的.
如果您不相信,请使用VB.NET编译模块,并使用C-Sharp使用ILSpy进行反编译.
是的,这意味着你是正确的,在功能方面,模块是一个类的SUBset.
接下来,在功能方面,类是模块的SUPERset,因为它可以包含静态和非静态方法和变量,以及虚拟和受保护的访问修饰符.
归档时间: |
|
查看次数: |
38588 次 |
最近记录: |