永发信息网

在C#中能否将运算符^重载为乘方运算,比如a^b表示a的b次方,如果可以的话,这样的语句有什么问题呢?

答案:1  悬赏:80  手机版
解决时间 2021-01-21 18:32
在C#中能否将运算符^重载为乘方运算,比如a^b表示a的b次方,如果可以的话,这样的语句有什么问题呢?
最佳答案
就是说这个operator的两个参数的类型,必须得至少有一个是和定义这个函数所在的类的类型相同
比如你自定义的类是class A
你可以在这个类中定义
public static double operator ^(A a, double b)
public static double operator ^(double a, A b)
但是不能定义
public static double operator ^(double a, double b)追问请问如果要实现"^"作为乘方运算符的话,两个参数都必须是double类型才行,应该怎样实现呢?追答只能说,在C#中,没办法重载两个参数都是double类型的二元运算符
可以定义一个和double非常接近的类型,比如
    public class A
    {
        private double value;
        public static implicit operator double(A a)
        {
            return a.value;
        }
        public static implicit operator A(double d)
        {
            return new A { value = d };
        }
        public static A operator ^(A l, A r)
        {
            return Math.Pow(l, r);
        }
    }这个A可以和double互相隐式类型转换,也可以用^做乘方运算
比如
Console.WriteLine((A)2.0 ^ 3.5);
Console.WriteLine(2.0 ^ (A)3.5);
都会打印出2.0的3.5次乘方的结果,编译器会自动做几次类型转换,并调用operator ^

但是至少还是得有一个数字写上显式类型转换,如果直接写2.0 ^ 3.5,编译器是不会自动把double和A联系起来的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
三分之二x加二分之一x=42方程解
涿州高官庄采摘园2016多少钱一斤
改正带断带了怎么修
女主叫花忆冷的np女尊书名,谢谢了!
Hr之前跟我说是有六险一金,发的offer只有五
成语玩命猜一个隹字与尤字是什么
单选题下列叙述,不正确的是A.东北是我国最大
一次数学测试,满分为100分.测试分数出来后
通力无机房电梯称重不回L0怎么调?
QQ飞车雷诺的悬挂多少为最好
一旦房价跌了 这些重要的事你要知道!
傲风诸神大陆第十二章第二节
我这苹果电脑能卖多少钱A1369的
算命抽签时 抽到天王签会怎样 就是签子下有红
陈红的纵向科研项目
推荐资讯
二项分布与几何分布的区别是什么?
跑一百米,9秒58和10.6秒最后能差多远?
重汽H0w0轻卡统帅报价与图片
又到每年同学聚会的“旺季”了,对时下这种功
3d2015捕捉怎么设置
wps演示文稿和ppt演示稿有什么区别?它们可以
蓝莓在我国哪些地方可以种植
文化眼光阅读答案
请问以下印尼文是不是一首歌的歌词..帮翻译..
书面表达(满分25分)假设你是林华,福建某中
已知在同温同压下,气体的体积比等于气体分子
下列各组词语中,没有错别字的一组是A.狄花放
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?