装配中的脑袋

用程序装配大脑,再用大脑装配程序
随笔 - 118, 评论 - 1214, 引用 - 11

导航

工具

关于

如果想发较大的信件,请用Ninputer @ gmail.com

不要在我的Blog评论中张贴广告,除非同意向我付款。

标签

每月存档

广告



访客

 

从本篇起,我将陆续介绍Visual Basic 2005新增加的语言功能和IDE功能。但是Visual Basic 2005现在还处于研制的早期,其功能还有很多没有确定,因此本系列所有文章的内容可能与最终发布版本不符,本系列只针对“现状”提供,不授予任何权利,也不承担任何责任。

Visual Basic 2005有很多值得一看的功能,比如泛型、运算符重载和最受关注的My命名空间等,我打算把有趣的放在后面,第一篇我将介绍带有不同级别访问器的属性。

在Visual Basic 4.0、5.0和6.0中,属性过程要为读取、写入书写不同的过程,如我想实现一个可读写的属性,至少要写两个过程:

Public Property Get MyProp() As Integer
Public Property Let MyProp(ByVal value As Integer)

其最大的优点是可以让掌管读取属性值的过程和掌管写入属性值的过程具有不同的可见性级别,如

Public Property Get MyProp() As Integer
Friend Property Let MyProp(ByVal value As Integer)

这么写的意思是,在该项目内,该属性是可读写的,而在项目外,该属性就是只读的。这个功能在组件设计中特别有用。

到了Visual Basic .NET中,属性的语法被改成在统一的Property过程中书写Set访问器和Get访问器。我们只能让属性的Set和Get有相同的访问级别。这样一来,虽然语法更加紧凑,却丢失了原先Property过程能在不同级别显出不同可见性的功能,这在VB.NET推出的早期是被反复提及的缺点之一。因此Visual Basic 2005决定将这一功能重新加入Visual Basic,现在属性过程的Get和Set访问器可以有不同的访问级别,其语法如下:

Public Property MyProp As Integer
    Get
        Retrun m_MyProp
    End Get
    Friend Set
(ByVal value As Integer)
        m_MyProp = value
    End Set
End Property

与早期版本不同,这种语法要求Property语句前边有一个可见性级别的修饰符,而在需要有与这个修饰符不同访问级别的访问器Get或Set前面加以另一种修饰符。不能在Get和Set两者前面同时增加访问级别修饰符,也不能在ReadOnly或WriteOnly属性的访问器前面加修饰符。要注意的是,Set或Get访问器的可见性必须比Property前面修饰符的可见性更严格(即只能缩小原来的可见性),否则是非法的。

上面这种Public Get - Friend Set模式的属性最为常用,而Visual Basic 2005有更多的访问级别可用,创建出在更多有用的属性。如

Protected Friend Property MyProp As Byte
    Protected Get
    End Get
    Set
(ByVal value As Byte)
    End Set
End Property

在该程序集的非子类中,这个属性是只写的,而在程序集外部的非子类中,这个属性又变为不可访问的,只能从子类访问这个属性。还有很多种搭配模式,比如Protected Friend Get - Protected Set这种模式,都是希望改变组件内外互相访问权限的常用手段。

结论:带有不同访问级别访问器的属性给我们设计组件带来了更多的灵活性,它可以让属性再不同的级别显示出不同的访问性。最后提到一点,C# 2.0也支持这个功能,而且语法十分相似。


随贴广告(测试期)
相关文章

打印 | 张贴于 2004-05-16 11:25:00 | Tag:技术随笔  Visual Basic 2005 新功能点评

留言反馈

回复: Visual Basic 2005新功能点评(一)——带有不同可见性级别访问器的属性 编辑
感谢楼主!收礼留言!
2007-01-31 17:55:00 | [匿名用户:ToddLiu]
回复: Visual Basic 2005新功能点评(一)——带有不同可见性级别访问器的属性 编辑
Thank you very much!
2006-11-28 12:12:00 | [匿名用户:Columbus]
re: Visual Basic 2005新功能点评(一)——带有不同可见性级别访问器的属性 编辑
很喜欢楼主的这些主题式的介绍!
继续关注!
2005-09-23 07:53:00 | [匿名用户:卜海清]
re: Visual Basic 2005新功能点评(一)——带有不同可见性级别访问器的属性 编辑
我觉得还不错!呵!!
2005-09-23 07:52:00 | [匿名用户:卜海清]
回复: Visual Basic 2005新功能点评(一)——带有不同可见性级别访问器的属性 编辑
我这儿上这个Blog比较慢,所以以后不会来了,到论坛上来吧,我在那儿回复你.
2004-07-05 00:37:00 | [匿名用户:chenziteng(陈子腾)]
回复: Visual Basic 2005新功能点评(一)——带有不同可见性级别访问器的属性 编辑
@chenziteng

你可以意思是,回到VB6的语法?
不是不可以,但是你若细细研究,就知道这种写法有什么好处。
2004-07-01 22:13:00 | [匿名用户:Ninputer]
回复: Visual Basic 2005新功能点评(一)——带有不同可见性级别访问器的属性 编辑
一句话:越改越烂,现在过程函数属性连形式上的一致性都没法保证了...
2004-06-30 19:01:00 | [匿名用户:chenziteng]
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode MVC Blogger System