今天就跟大家聊聊有关VB.NET中怎么实现运算符重载,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
在VisualBasic2005的诸多增强的功能中,运算符的重载是***大的之一。VB.NET运算符重载允许在任何数据类型上定义运算符,甚至是对你自己创建的基类型进行运算。
最经典的VB.NET运算符重载的例子就是定义复数的相加。一个简化了的拥有“ ”号重载运算符的Complex类,可能是下面这种形式:
PublicClassComplex PublicRealAsDouble PublicImagAsDouble PublicSubNew(ByValrealPartAsDouble,ByValimagPartAsDouble) Real=realPart Imag=imagPart EndSub SharedOperator (ByVallhsAsComplex,ByValrhsAsComplex)AsComplex ReturnNewComplex(lhs.Real rhs.Real,lhs.Imag rhs.Imag) EndOperator EndClass
现在,我们可以用非常直觉的方式,用“ ”号运算符来使两个复数相加:
DimlhsAsComplex=NewComplex(2.0,2.5) DimrhsAsComplex=NewComplex(3.0,3.5) DimresAsComplex=lhs rhs''res.real=5.0,res.imag=6.0
你也可以为你的自定义类型重载转换运算符。如果你试图把上面的res的值按照CType(res,String)转换,你会得到一个编译错误告诉你Complex类无法转换成String。如果考虑使用res.ToString的值的话,你会发现复数值的ToString方法返回的只是它的默认类型名。你可以通过VB.NET运算符重载CType转换运算符和ToString方法来解决这些问题,就像这样:
PublicSharedNarrowingOperatorCType(ByValValueAsComplex)AsString ''这里的转换没有特殊的要求,因此也可以把Narrowing关键字改成Widening关键字 ReturnValue.Real.ToString&"i"&Value.Imag.ToString EndOperator
作者原文的这段代码有误,无法实现覆盖基类Object类型的ToString方法!
PublicOverridesFunctionToString(ByValValueAsComplex)AsString ReturnValue.Real.ToString&"i"&Value.Imag.ToString EndFunction
正确的代码如下!
PublicOverridesFunctionToString()AsString ReturnReal.ToString&"i"&Imag.ToString EndFunction
现在CType(res,String)和res.ToString的返回值就和我们想要的一样了:“5.0i6.0”(实际得到的是“5i6”,VisualBasic把***的点零省略了,涕淌注)。转换运算符声明时必须要么被Narrowing修饰,要么被Widening修饰,以此来说明转换的性质。
看完上述内容,你们对VB.NET中怎么实现运算符重载有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。