use*_*569 6 vb.net operator-overloading
为什么VB.NET中的赋值运算符(+ =, - =,*=,/ =)不可重载?
Ala*_*ain 10
也许这是他们的推理:
谢谢你的建议!我们不允许您为类型重载赋值运算符,因为当前无法确保其他语言或.NET Framework本身将遵循赋值运算符.唯一的选择是限制赋值运算符可以执行的重载类型,但我们认为这对于通常有用而言限制性太强.
谢谢!Paul Vick技术主管,VB
有一种叫做"Narrowing"和"Widening"的东西,它允许你定义从一种类型到另一种类型的显式和隐式转换器,即
Dim y as MyClass1
Dim x as MyClass2 = y
Run Code Online (Sandbox Code Playgroud)
但是,这不会改变赋值运算符以分配同一个类的实例,只转换其他类.
请参见如何:定义转换运算符
Class MyClass1
Public Shared Widening Operator CType(ByVal p1 As MyClass1) As MyClass2
End Operator
End Class
Run Code Online (Sandbox Code Playgroud)
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=赋值运算符不能重载,但是+ =,例如,使用+来计算,可以重载.
=, ., ?:, ??, ->, =>, f(x), as, checked, unchecked, default, delegate, is, new, sizeof, typeof
这些运算符不能超载.
使用相同的转换运算符:
struct MyType1
{
...
public static explicit operator MyType1(MyType2 src) //explicit conversion operator
{
return new MyType1 { guts = src.guts };
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3045 次 |
| 最近记录: |