加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读