-
vb.net教程之vb.net的共享成员(Share Members)
vb.net的共享成员(Share Members)
共享成员就是被类的实例所共享的属性、过程、字段等等。在vb.net的继承中,在所有的类的实例中把一个数据成员或函数的一个单独的实例设置成共享是非常有用的。共享成员独立于任何一个特定的类的实例。共享的过程在对象中必须显式的声明。由于这个原因,在共享方法中,引用不共享的成员是允许的。公有的共享的成员可以远程的访问,并且可以在对象中后期绑定。
注意:在其他的编程语言中,共享成员也被称为Static或者class成员。
有一个类库,该类库含有一些附加的过程,这些过程对于这个类库而言是一些概念性的部分,需要单独运行,并需要用户去声明这个类中的一些类型。
假设开发了一个应用程序,它需要知道有多少个用户现在登录了该应用程序。当用户安装了用户的应用程序后,注册信息被写入了注册表,而且用户的运行程序每次在运行的时候都要访问用户声明的UserInfo对象。一个Long型共享成员UserCount就可以跟踪用户的个数,并且用一个属性CanCreateUser来检查UserCount共享成员,是否要声明已经达到了登录人数的极限最大值,并且初始化UserInfo的值来决定是让用户进入。
用户也可以在以下情况使用共享成员,假设有很多对象,而且这些对象需要共享一些信息。例如,假设已经建立了一个制定行程计划的软件用来计算所选择的一个旅游城市离国会大厦是不是中100里之内。在City类中有Latitude和Longitude成员。对于半径在100里之内的城市,City的共享的NearCapitol属性为"Incremented",而对于半径在100里之外的城市,City的共享的NearCapitol属性为"Decremented".
在以上这些情况时,如果没有这些共享成员的话,需要建立一个a.bas模块来记录这些信息,这样做可能会给代码的维护带来一些困难,而且理解类也会更加困难.在一个类中保留共享成员会是用户更好地理解它们的目的.而且在工程中,也将会更好地重用这些代码.
下面这个例子声明了一个具有一个属性和共享数据成员的类.当用户运行这个程序的时候,每一个PortDescriptor类的对象均有一个惟一的"Descript"属性,但是共享着一个共享的数据成员Load,在对象PD1中改变Load属性的话将会改变对象PD2的属性"Load"的值,其代码如下:
Imports system
Namespace ANameSpace
Module Module1
Class PortDescriptor
Public Shared Load as Integer
Private strDesc as String
Property descript as String
Get
descript=strDesc
End Get
Set
strDesc=Value
End Set
End Property
End Class
Shared Sub Main()
Dim PD1 as PortDescriptor=New PortDescriptor
Dim PD2 as PortDescriptor=New PortDescriptor
PD1.descript="Idle"
PD1.Load=80
Console.WriteLine("PD1 Descript=:"&PD1.descript)
Console.WriteLine("PD1 Load=:"&PD1.Load)
Pd2.descript="Activr"
Pd2.Load=540
Console.WriteLine("PD2 Descript=:"&Pd2.descript)
console.WriteLine("PD2 Load=:"&PD2.Load)
Console.WriteLine("PD1 Descript now=:"&Pd1.descript)
Console.WriteLine("PD1 Load now=:"&PD1.Load)
End Sub
End Module
End Namespace
共享成员就是被类的实例所共享的属性、过程、字段等等。在vb.net的继承中,在所有的类的实例中把一个数据成员或函数的一个单独的实例设置成共享是非常有用的。共享成员独立于任何一个特定的类的实例。共享的过程在对象中必须显式的声明。由于这个原因,在共享方法中,引用不共享的成员是允许的。公有的共享的成员可以远程的访问,并且可以在对象中后期绑定。
注意:在其他的编程语言中,共享成员也被称为Static或者class成员。
有一个类库,该类库含有一些附加的过程,这些过程对于这个类库而言是一些概念性的部分,需要单独运行,并需要用户去声明这个类中的一些类型。
假设开发了一个应用程序,它需要知道有多少个用户现在登录了该应用程序。当用户安装了用户的应用程序后,注册信息被写入了注册表,而且用户的运行程序每次在运行的时候都要访问用户声明的UserInfo对象。一个Long型共享成员UserCount就可以跟踪用户的个数,并且用一个属性CanCreateUser来检查UserCount共享成员,是否要声明已经达到了登录人数的极限最大值,并且初始化UserInfo的值来决定是让用户进入。
用户也可以在以下情况使用共享成员,假设有很多对象,而且这些对象需要共享一些信息。例如,假设已经建立了一个制定行程计划的软件用来计算所选择的一个旅游城市离国会大厦是不是中100里之内。在City类中有Latitude和Longitude成员。对于半径在100里之内的城市,City的共享的NearCapitol属性为"Incremented",而对于半径在100里之外的城市,City的共享的NearCapitol属性为"Decremented".
在以上这些情况时,如果没有这些共享成员的话,需要建立一个a.bas模块来记录这些信息,这样做可能会给代码的维护带来一些困难,而且理解类也会更加困难.在一个类中保留共享成员会是用户更好地理解它们的目的.而且在工程中,也将会更好地重用这些代码.
下面这个例子声明了一个具有一个属性和共享数据成员的类.当用户运行这个程序的时候,每一个PortDescriptor类的对象均有一个惟一的"Descript"属性,但是共享着一个共享的数据成员Load,在对象PD1中改变Load属性的话将会改变对象PD2的属性"Load"的值,其代码如下:
Imports system
Namespace ANameSpace
Module Module1
Class PortDescriptor
Public Shared Load as Integer
Private strDesc as String
Property descript as String
Get
descript=strDesc
End Get
Set
strDesc=Value
End Set
End Property
End Class
Shared Sub Main()
Dim PD1 as PortDescriptor=New PortDescriptor
Dim PD2 as PortDescriptor=New PortDescriptor
PD1.descript="Idle"
PD1.Load=80
Console.WriteLine("PD1 Descript=:"&PD1.descript)
Console.WriteLine("PD1 Load=:"&PD1.Load)
Pd2.descript="Activr"
Pd2.Load=540
Console.WriteLine("PD2 Descript=:"&Pd2.descript)
console.WriteLine("PD2 Load=:"&PD2.Load)
Console.WriteLine("PD1 Descript now=:"&Pd1.descript)
Console.WriteLine("PD1 Load now=:"&PD1.Load)
End Sub
End Module
End Namespace
栏目列表
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比