装配中的脑袋

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

导航

工具

关于

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

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

标签

每月存档

广告



访客

 

关键词:VB2005 VB8.0 VB.NET Whidbey

接上此,我们继续讨论运算符重载。本次首先讨论一元运算符。Visual Basic允许重载的一元运算符包括+、-、Not、IsTrue和IsFalse。其中IsTrue和IsFalse运算符因其特殊性放在后文比较运算符中介绍。一元运算符重载的语法是:

<attributes> Public Shared Operator OpSymbol(Arg)As ReturnType

其中运算符参数Arg必须是定义运算符的类型,而+、-和Not的返回值没有要求。下面例子演示求复数相反数(用-)和共轭复数(用Not)的例子:

Public Shared Operator -(val As Complex)As Complex
    Return New Compex(-val.Real, -val.Imaginary)
End Operator

Public Shared Operator Not(val As Complex)As Complex
    Return New Complex(val.Real, -val.Imaginary)
End Operator

比较运算符包括=、<>、>、>=、<和<=,由于IsTrue和IsFalse与比较运算符密切相关,因此也放在一起讨论。比较运算符是二元运算符,它与普通二元运算符相比有以下限制(包括IsTrue和IsFalse):

1、他们必须成对重载,即重载了=就必须重载<>,而重载了IsTrue就必须重载IsFalse。

2、它们的返回值必须是Boolean型。

对于=和<>运算符,重载他们就要求重写Object.Equals和Object.GetHashCode两个方法,因为若不重写他们,将造成语义不统一的现象。如果类型重载了比较大小的运算符,也最好实现IComparable接口,以便提供一致的比较方案。

IsTrue和IsFalse运算符无法在代码中使用,他们也不是VB的关键字。但Visual Basic在处理AndAlso和OrElse运算符时会用到它们。AndAlso和OrElse是不能重载的逻辑运算符,但如果重载了And、Or和IsTrue、IsFalse运算符就可以使用它们,VB将按照如下规则计算X AndAlse Y:

IIf(IsFalse(X), X,?X And Y)

而按照如下规则计算X OrElse Y:

IIf(IsTrue(X), X, X Or Y)

这里我们只取IIf的语义,即把它想象一个内联函数,而实际不是调用缓慢的IIf函数。IsTrue和IsFalse还用于隐式将类型转换为Boolean型,它可以使类型表示既不是True也不是False的Nothing。同时,重载了IsTrue和IsFalse运算符的类型还能用于If、While、Do和For等需要布尔变量的语言环境中。

下次我们介绍类型转换运算符和符合CLS的设计指南。


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

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

留言反馈

回复: Visual Basic 2005新功能点评(七)——运算符重载 part.2 编辑
这一期请得不够详细
2004-06-08 14:29:00 | [匿名用户:阿赖]
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode MVC Blogger System