d--*_*--b 7 c# vb.net operator-overloading operator-keyword
我正在编写一个暴露给VB.Net的C#类.我想重载vb.net ^运算符,以便我可以写:
Dim c as MyClass
Set c = New ...
Dim d as MyClass
Set d = c^2
Run Code Online (Sandbox Code Playgroud)
在C#中,^运营商是xor运营商,电力运营商不存在.有没有办法可以做到这一点?
D S*_*ley 11
编辑
事实证明,有一个SpecialNameAttribute允许你在C#中声明"特殊"函数,它将允许你(除其他外)重载VB power运算符:
public class ExponentClass
{
public double Value { get; set; }
[System.Runtime.CompilerServices.SpecialName]
public static ExponentClass op_Exponent(ExponentClass o1, ExponentClass o2)
{
return new ExponentClass { Value = Math.Pow(o1.Value, o2.Value) };
}
}
Run Code Online (Sandbox Code Playgroud)
op_Exponent上面的类中的函数由VB转换为^幂运算符.
有趣的是,文档说明了.NET框架当前未使用的属性...
- 原始答案 -
不会^.power ()运算符被编译为,Math.Pow()所以没有办法在C#中"重载"它.
来自LinqPad:
Sub Main
Dim i as Integer
Dim j as Integer
j = Integer.Parse("6")
i = (5^j)
i.Dump()
End Sub
Run Code Online (Sandbox Code Playgroud)
IL:
IL_0001: ldstr "6"
IL_0006: call System.Int32.Parse
IL_000B: stloc.1
IL_000C: ldc.r8 00 00 00 00 00 00 14 40
IL_0015: ldloc.1
IL_0016: conv.r8
IL_0017: call System.Math.Pow
IL_001C: call System.Math.Round
IL_0021: conv.ovf.i4
IL_0022: stloc.0
IL_0023: ldloc.0
IL_0024: call LINQPad.Extensions.Dump
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |