您的位置:首页 > 编程语言 > C#

C#运算符重载

2014-09-10 11:01 155 查看
运算符重载允许为运算指定用户定义的运算符实现,其中一个或两个操作数是用户定义的类或结构类型。用户定义的运算符实现的优先级总是高于预定义运算符实现:仅当没有适用的用户定义运算符实现时才会考虑预定义运算符实现。
运算符
可重载性
+、-、!、~、++、--、true、false
可以重载这些一元运算符。

true和false运算符必须成对重载。
+、-、*、/、%、&、|、^、<<、>>
可以重载这些二元运算符。
==、!=、<、>、<=、>=
可以重载比较运算符。必须成对重载。
&&、||
不能重载条件逻辑运算符。

但可以使用能够重载的&和|进行计算。
[]
不能重载数组索引运算符,但可以定义索引器。
()
不能重载转换运算符,但可以定义新的转换运算符。
+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=
不能显式重载赋值运算符。

在重写单个运算符如+、-、%时,它们会被隐式重写。
=、.、?:、->、new、is、sizeof、typeof
不能重载这些运算符。
下面的例子中Vector结构表示一个三维矢量:



1 using System;
2
3 namespace ConsoleApplication19
4 {
5     class Program
6     {
7         static void Main(string[] args)
8         {
9             Vector vect1, vect2, vect3;
10             vect1 = new Vector(3.0, 3.0, 1.0);
11             vect2 = new Vector(2.0, -4.0, -4.0);
12             vect3 = vect1 + vect2;
13
14             Console.WriteLine("vect1=" + vect1.ToString());
15             Console.WriteLine("vect2=" + vect2.ToString());
16             Console.WriteLine("vect3=" + vect3.ToString());
17             Console.ReadLine();
18         }
19     }
20
21     struct Vector
22     {
23         public double x, y, z;
24
25         public Vector(double x, double y, double z)
26         {
27             this.x = x;
28             this.y = y;
29             this.z = z;
30         }
31
32         public Vector(Vector rhs)
33
34         {
35             this.x = rhs.x;
36             this.y = rhs.y;
37             this.z = rhs.z;
38         }
39
40         public override string ToString()
41         {
42             return "(" + x + "," + y + "," + z + ")";
43         }
44
45         public static Vector operator +(Vector lhs, Vector rhs)
46         {
47             Vector result = new Vector(lhs);
48             result.x += rhs.x;
49             result.y += rhs.y;
50             result.z += rhs.z;
51             return result;
52         }
53     }
54 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: