永发信息网

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

答案:1  悬赏:80  手机版
解决时间 2021-01-21 18:32
  • 提问者网友:酱爆肉
  • 2021-01-21 05:55
在C#中能否将运算符^重载为乘方运算,比如a^b表示a的b次方,如果可以的话,这样的语句有什么问题呢?
最佳答案
  • 五星知识达人网友:逃夭
  • 2021-01-21 06:31
就是说这个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联系起来的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯