在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联系起来的
比如你自定义的类是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联系起来的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯