c# 运算符重载

本文介绍了C#中运算符重载的规则,包括必须成对重载的比较运算符和可以重载的算术运算符等。通过示例代码展示了如何重载一元运算符如++和--,以及二元运算符如+和-。同时,文章指出某些运算符不可重载,并提供了相应的替代方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概要

1.1可重载运算符

可重载运算符说明
  +x, -x, !x, ~x, ++, --, true, falsetrue和 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) 的一元运算符都是符号再左侧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值