C#学习教程:VB.Net Power运算符(^)从C#重载分享


VB.Net Power运算符(^)从C#重载

我正在编写一个暴露给VB.Net的C#类。 我想重载vb.net ^运算符,以便我可以写:

 Dim c as MyClass Set c = New ... Dim d as MyClass Set d = c^2 

在C#中, ^运算符是xor运算符,幂运算符不存在。 有没有办法可以做到这一点?

编辑

事实certificate,有一个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) }; } } 

上面的类中的op_Exponent函数由VB转换为^幂运算符。

有趣的是, 文档说明了.NET框架当前未使用的属性…

– 原始答案 –

不。幂( ^ )运算符被编译为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 

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 

通过实验,结果表明运算符重载只是语法糖,如果你需要用多种语言开发,最好避免使用。 例如,VB.NET的^运算符被转换为op_Exponent函数,因此这是C#可以使用的。

为什么C#没有电源运营商?

您可以使用本机.NET方式,因此您不依赖于运算符:

 Math.Pow(x, y); 

同样,对于y = 2,使用乘法(x * x)更快。

上述就是C#学习教程:VB.Net Power运算符(^)从C#重载分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031936.html

发表评论

邮箱地址不会被公开。 必填项已用*标注