1.概要
1.1可重载运算符
可重载运算符 | 说明 |
+x, -x, !x, ~x, ++, --, true, false | true和 false 运算符必须一起重载。 |
x + y, x - y, x * y, x / y, x % y, x & y, x | y, x ^ y, x << y, x >> y, x >>> y | |
x == y, x != y, x < y, x > y, x <= y, x >= y | 必须按如下方式成对重载: == 和 !=、 < 、 ><= 和 >=。 |
1.2不可重载运算符
可重载运算符 | 备选方法 |
x && y, x || y | 重载 true 和 false 运算符以及 & 或 | 运算符。 有关详细信息,请参阅用户定义的条件逻辑运算符。 |
a[i], a?[i] | 定义索引器。 |
(T)x | 定义可由强制转换表达式执行的自定义类型转换。 有关详细信息,请参阅用户定义转换运算符。 |
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>= | 重载相应的二元运算符。 例如,重载二进制 + 运算符时, += 会隐式重载。 |
^x, x = y, x.y, x?.y, c ? t : f, x ?? y, ??= y, x..y, x->y, =>, f(x), as, await, checked, unchecked, default, delegate, is, nameof, new, sizeof, stackalloc, switch, typeof, with | 无。 |
2.试验代码
using System;
namespace 运算符重载
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("运算符重载");
Console.WriteLine("二元运算符:+");
A a = new A();
A b = new A();
A c = a + b;
Console.WriteLine(c.a);
Console.WriteLine("一元运算符:++");
A d = new A();
d++;
Console.WriteLine(d.a);
Console.WriteLine("二元运算符:-");
A e = new A();
A f = new A();
e = e - f;
Console.WriteLine(e.a);
Console.WriteLine("一元运算符:+x");
A h = new A();
Console.WriteLine((+h).a);
Console.ReadKey();
}
}
class A
{
public int a = 1;
public static A operator +(A b, A c)
{
A a = new A();
a.a = b.a + c.a;
return a;
}
public static A operator ++(A b)
{
b.a++;
return b;
}
public static A operator +(A b)
{
A a = new A();
a.a = b.a + 1;
return a;
}
public static A operator --(A b)
{
b.a--;
return b;
}
public static A operator -(A b,A c)
{
A a = new A();
a.a = b.a-c.a;
return b;
}
public static bool operator true(A x)
{
return x.a == 1;
}
public static bool operator false(A x)
{
return x.a != 1;
}
}
}
3.运行结果
4.规律总结
1.有+x的重载,没有x+的重载。public static A operator +(A b) 的一元运算符都是符号再左侧。