关键词: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 新功能点评
留言反馈