• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#运算符重载

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、简介

  平时我们使用的运算符都是C#内置定义好的,比如+-*/等等,但是我们项目中遇到复杂一点的运算方式,只能我们自己重载相应的运算符。比如两个类相加+,我们可以重载类的+运算符,在函数里面,自定义我们的规则。

operator 关键字定义静态成员函数,来允许用户定义的类型重载运算符。 

 


 二、详细说明

不过并非所有运算符都可以进行重载,并且其他运算符具有限制

运算符

可重载性

+-!~++--truefalse

这些一元运算符可以进行重载。

+-*/%&|^<<>>

这些二元运算符可以进行重载。

==!=<><=>=

比较运算符可以进行重载(但是请参阅此表后面的备注)。

&&||

条件逻辑运算符无法进行重载,但是它们使用 & 和 |(可以进行重载)来计算。

[]

数组索引运算符无法进行重载,但是可以定义索引器。

(T)x

强制转换运算符无法进行重载,但是可以定义新转换运算符(请参阅 explicit 和 implicit)。

+=-=*=/=%=&=|=^=<<=>>=

赋值运算符无法进行重载,但是 +=(举例)使用 +(可以进行重载)来计算。

=.?:??->=>f(x)ascheckeduncheckeddefaultdelegateisnewsizeoftypeof

这些运算符无法进行重载。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 备注:

对于比较运算符 < 和 >,以及 <= 和 >=,也成立。

 


三、示例

定义一个rect类,存储宽高。主要讲解 +的重载

class Rect
{
  public Rect(int w, int h)
  {
    W = w;
    H = h;
  }

  int W;
  int H;

  //重载 类的+运算符 
  public static Rect operator +(Rect x, Rect y)
  {
    return new Rect(x.W + y.W, x.H + y.H);  //自定义代码
  }

}

 

调用

  调用特别简单,就像使用默认+运算符一样

Rect x = new Rect(3,5);
Rect y = new Rect(2, 2);

Rect my = x + y;  //调用自定义的 + 运算符

 


四、总结

  • 尽可能的不要改变运算符本身的含义
  • 不同于扩展方法,所重载的方法必须是在被重载的类型内部,且用关键字operator
  • 二元重载符,其中一个参数必须是封闭类型(就是自定义类型)
  • C#要求所有的运算符重载都声明为publicstatic,必须是类的静态方法,这表示它们与它们的类或结构相关联,而不是与实例相关联
  • C# 不允许重载=运算符,但如果重载例如+运算符,编译器会自动使用+运算符的重载来执行+=运算符的操作。
  • 运算符只能采用值参数,不能采用ref或out参数

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#简单的运用继承方法重写字段公有化发布时间:2022-07-13
下一篇:
CPP(c++)多线程发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap