C#核心(11) 运算符重载

前言

我们知道函数是可以重载的,重载后的作用是干嘛呢?其实就是为了方便适应不同的参数传递。

那运算符我们也可以理解是一个函数,只是我们希望为更多的参数引入运算符使得他们可以被计算。

c#设计这么一块功能,其实也是为了方便我们在某些地方可以更快捷的使用不同的运算符。

概念

让自定义类和结构体能够使用运算符的一种概念。

关键字:operator

特点

  1. 一定是一个公共的静态方法
  2. 返回值写在operator前面
  3. 逻辑自定义

作用:让自定义类和结构体对象之间可以进行运算

tips:

  1. 条件运算符必须成对实现
  2. 一个运算符可以有多个重载
  3. 不能使用ref和out

基本语法

public static 返回值类型 operator 运算符(参数列表)

 示例和使用

我们在游戏中经常会遇到要进行坐标之间的运算,所以这里干脆直接我们就来实现一个坐标之间的运算符重载,博主将主要经常用的方法已经给你写好了,留下的任务一是让你去体验一下他的整体过程,取反的话相对来说复杂一些,可以选做。

using System;

namespace CoordinateOperatorOverloading
{
    class Coordinate
    {
        public int X { get; set; }
        public int Y { get; set; }

        public Coordinate(int x, int y)
        {
            X = x;
            Y = y;
        }

        // 重载 + 运算符
        public static Coordinate operator +(Coordinate c1, Coordinate c2)
        {
            return new Coordinate(c1.X + c2.X, c1.Y + c2.Y);
        }

        // 重载 - 运算符
        public static Coordinate operator -(Coordinate c1, Coordinate c2)
        {
            return new Coordinate(c1.X - c2.X, c1.Y - c2.Y);
        }

        // 重载 * 运算符(坐标与常数相乘)
        public static Coordinate operator *(Coordinate c, int scalar)
        {
            return new Coordinate(c.X * scalar, c.Y * scalar);
        }

        // 重载 * 运算符(常数与坐标相乘)
        public static Coordinate operator *(int scalar, Coordinate c)
        {
            return new Coordinate(c.X * scalar, c.Y * scalar);
        }

        // 重载 ++ 运算符(前缀)
        public static Coordinate operator ++(Coordinate c)
        {
            return new Coordinate(c.X + 1, c.Y + 1);
        }

        // 重载 -- 运算符(前缀)
        public static Coordinate operator --(Coordinate c)
        {
            return new Coordinate(c.X - 1, c.Y - 1);
        }

        // 重载 ToString 方法
        public override string ToString()
        {
            return $"({X}, {Y})";
        }
        //任务:增加重载比较运算符的方法
        //选做任务:增加取反:包括x单独取反,y单独取反,xy同时取反
    }

    class Program
    {
        static void Main(string[] args)
        {
            Coordinate c1 = new Coordinate(3, 5);
            Coordinate c2 = new Coordinate(2, 4);

            Coordinate addition = c1 + c2;
            Coordinate subtraction = c1 - c2;
            Coordinate multiplication1 = c1 * 2;
            Coordinate multiplication2 = 3 * c2;
            Coordinate increment = ++c1;
            Coordinate decrement = --c2;

            Console.WriteLine($"Addition: {addition}");
            Console.WriteLine($"Subtraction: {subtraction}");
            Console.WriteLine($"Multiplication1: {multiplication1}");
            Console.WriteLine($"Multiplication2: {multiplication2}");
            Console.WriteLine($"Increment: {increment}");
            Console.WriteLine($"Decrement: {decrement}");
        }
    }
}

不仅要看懂,更要多多去敲代码。

可重载和不可重载的运算符

可重载算术:+,-,*,/   逻辑:!  位:|, &, ^, ~, >> ,<< 条件> <(需要成对实现) 
不可重载&& ,|| ,[] ,() ,点 . ,三目运算符 ,?= ,=,??

有些运算符你可能没见过,可以自己手动查一查。

总结

运算符重载的知识点不算难,其实就是记住一个关键词加使用范围就可以了。

这也算核心中补的一个小知识点,在未来你对某些复杂结构体之间的计算使用还是有一定的帮助的。

多说无益,还是需要脚踏实地。

c#是你学好unity开发的基础。

请期待我的下一篇博客!

我来自佑梦游戏开发,感谢你的关注和收藏!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值