本帖最后由 小狸 于 2014-5-11 16:11 编辑
C#运算符的重载,依照我的理解,就是在类和结构中重新定义运算符,使得对象和对象之间能够进行我们想要的操作. 一个例子:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace _运算符的重载
- {
- class Program
- {
- static void Main(string[] args)
- {
- Vector v1, v2, v3;
- bool b;
- v1 = new Vector(3.0, 3.0, 1.0);
- v2 = new Vector(2.0, -4.0, -4.0);
- v3 = v1 + v2;
- b = v1==v2;
- Console.WriteLine("V1={0}",v1.ToString());
- Console.WriteLine("V2={0}", v2.ToString());
- Console.WriteLine("V3={0}", v3.ToString());
- Console.WriteLine("v1=v2? {0}", b);
-
- Console.ReadLine();
- }
- 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+")";
- }
- public static Vector operator +(Vector ihs, Vector rhs)
- {
- Vector result = new Vector(ihs);
- result.x += rhs.x;
- result.y += rhs.y;
- result.z += rhs.z;
- return result;
- }
- public static bool operator ==(Vector ihs,Vector rhs){
- if(ihs.x==rhs.x&&ihs.y==rhs.y&&ihs.z==rhs.z)
- {
- return true;
- }
- else
- {
- return false;
- }
-
- }
- public static bool operator !=(Vector ihs, Vector rhs) {
- return !(ihs==rhs);
- }
- }
- }
- }
复制代码
上面的这个例子定义了一个结构Vector,它的含义是一个三点的坐标矢量.public static Vector operator + 就是在Vector中对+运算符的重载.当我们调用V1+V2时,operator 关键字会告诉编译器说,这是我定义的操作符.那么编译器就会直接进行三点坐标的相加运算了.
当然重载操作符,还可以用于逻辑运算符.
还是上面的例子,我们想要达到比较三点坐标是否相同,显然判断两个对象的引用是否相同不是我们的目的.
通过public static bool operator ==()和public static bool operator !=()来重载,比较他们的三点的坐标.
==()和!=()必须是成对出现的
在C#中重载运算符必须是以public 和 static修饰的.
C#可以进行重载的操作符:
像上表说的,这个例子中,重载== 时就必须true false 成对出现
|