C# 运算符重载方法 C#如何对运算符进行重载-C#.Net教程

C#中可重载运算符包括一元的+、-、!、~、++、–、true、false,二元的+、-、*、/、%、&、|、^、、==、!=、、=,且==与!=等须成对重载;不可重载&&、||、?:、=等。

运算符重载在 C# 中只能在 struct 或 class 内部用 public static 方法实现,且必须使用 operator 关键字声明;不能重载所有运算符,也不能改变运算符优先级或结合性。

哪些运算符可以重载

C# 允许重载的运算符有明确限制。可重载的包括:

  • 一元运算符:+、-、!、~、++、--、true、false
  • 二元运算符:+、-、*、/、%、&、|、^、、>>、==、!=、、>、、>=
  • 必须成对重载:== 和 !=、 和 >、 和 >=、true 和 false

不可重载的包括:&&、||、?:、=、.、?:、->、sizeof、typeof、new、checked、unchecked 等。

重载 == 和 != 的正确写法

这是最容易出错的地方:重载 == 后,编译器会强制要求同时重载 !=,并且还必须重写 Equals(object) 和 GetHashCode(),否则会触发 CS0660 / CS0661 警告。

典型错误是只重载 ==,或在 == 中直接调用 object.ReferenceEquals 但没处理 null 参数。

public class Vector2
{
    public double X { get; }
    public double Y { get; }
public Vector2(double x, double y) => (X, Y) = (x, y);

public static bool operator ==(Vector2 a, Vector2 b)
{
    if (ReferenceEquals(a, b)) return true;
    if (a is null || b is null) return false;
    return a.X == b.X && a.Y == b.Y;
}

public static bool operator !=(Vector2 a, Vector2 b) => !(a == b);

public override bool Equals(object obj) => obj is Vector2 v && this == v;

public override int GetHashCode() => HashCode.Combine(X, Y);

}

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » C# 运算符重载方法 C#如何对运算符进行重载-C#.Net教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3999553+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3999553+
  • 本周更新: 0+
  • 最后更新: 2026-03-16