VB.Net Power运算符(^)从C#重载
发布时间:2020-12-17 00:32:58 所属栏目:大数据 来源:网络整理
导读:我正在编写一个暴露给VB.Net的C#类.我想重载vb.net ^运算符,以便我可以写: Dim c as MyClassSet c = New ...Dim d as MyClassSet d = c^2 在C#中,^运算符是xor运算符,幂运算符不存在.有没有办法可以做到这一点? 编辑 事实证明,有一个SpecialNameAttribute
我正在编写一个暴露给VB.Net的C#类.我想重载vb.net ^运算符,以便我可以写:
Dim c as MyClass Set c = New ... Dim d as MyClass Set d = c^2 在C#中,^运算符是xor运算符,幂运算符不存在.有没有办法可以做到这一点?
编辑
事实证明,有一个SpecialNameAttribute允许您在C#中声明“特殊”函数,这将允许您(除其他外)重载VB电源运算符: 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转换为^幂运算符. 有趣的是,documentation声明了.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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |