文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#中怎么实现运算符重载

2023-06-18 00:15

关注

本篇文章给大家分享的是有关C#中怎么实现运算符重载,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

什么是C#运算符重载?

所谓运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数。

下面是Vector的定义—— 包含成员字段、构造函数和一个ToString()重写方法,以便查看Vector的内容,***是C#运算符重载:

namespace Wrox.ProCSharp.OOCSharp  {  struct Vector  {  public double x, y, z;  public Vector(double x, double y, double z)  {  this.x = x;  this.y = y;  this.z = z;  }  public Vector(Vector rhs)  {  x = rhs.x;  y = rhs.y;  z = rhs.z;  }  public override string ToString()  {  return "( " + x + " , " + y + " , " + z + " )";   }

这里提供了两个构造函数,通过传递每个元素的值,或者提供另一个复制其值的Vector,来指定矢量的初始值。第二个构造函数带一个Vector参数,通常称为复制构造函数,因为它们允许通过复制另一个实例来初始化一个类或结构实例。注意,为了简单起见,把字段设置为public。也可以把它们设置为private,编写相应的属性来访问它们,这样做不会改变这个程序的功能,只是代码会复杂一些。

下面是Vector结构的有趣部分—— 为+运算符提供支持的C#运算符重载:

public static Vector operator + (Vector lhs, Vector rhs)  {  Vector result = new Vector(lhs);  result.x += rhs.x;  result.y += rhs.y;  result.z += rhs.z;  return result;  }  }  }

C#运算符重载的声明方式与方法的声明方式相同,但operator关键字告诉编译器,它实际上是一个运算符重载,后面是相关运算符的符号,在本例中就是+。返回类型是在使用这个运算符时获得的类型。在本例中,把两个矢量加起来会得到另一个矢量,所以返回类型就是Vector。对于这个+运算符重载,返回类型与包含类一样,但这种情况并不是必需的。两个参数就是要操作的对象。对于二元运算符(带两个参数),如+和-运算符,***个参数是放在运算符左边的值,第二个参数是放在运算符右边的值。

C#要求所有的C#运算符重载都声明为public和static,这表示它们与它们的类或结构相关联,而不是与实例相关联,所以运算符重载的代码体不能访问非静态类成员,也不能访问this标识符;这是可以的,因为参数提供了运算符执行任务所需要知道的所有数据。

前面介绍了声明运算符+的语法,下面看看运算符内部的情况:

{  Vector result = new Vector(lhs);  result.x += rhs.x;  result.y += rhs.y;  result.z += rhs.z;  return result;  }

这部分代码与声明方法的代码是完全相同的,显然,它返回一个矢量,其中包含前面定义的lhs和rhs的和,即把x、y和z分别相加。

下面需要编写一些简单的代码,测试Vector结构:

static void Main()  {  Vector vect1, vect2, vect3;  vect1 = new Vector(3.0, 3.0, 1.0);  vect2 = new Vector(2.0,­­­–4.0,–4.0);  vect3 = vect1 + vect2;  Console.WriteLine("vect1 = " + vect1.ToString());  Console.WriteLine("vect2 = " + vect2.ToString());  Console.WriteLine("vect3 = " + vect3.ToString());  }

把这些代码保存为Vectors.cs,编译并运行它,结果如下:

Vectors  vect1 = ( 3 , 3 , 1 )  vect2 = ( 2 ,–4 ,–4 )  vect3 = ( 5 ,–1 ,–3 )

C#运算符重载不能用于Java。

以上就是C#中怎么实现运算符重载,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯