什么是C#运算符重载?
10年积累的网站设计制作、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有乌当免费网站建设让你可以放心的选择与我们合作。
所谓运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。
自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数。
下面是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#运算符重载的相关内容就向你介绍到这里,希望对你了解C#运算符重载有所帮助。
分享名称:C#运算符重载概念及应用详解
浏览地址:http://www.shufengxianlan.com/qtweb/news49/526349.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联