C#运算符重载
2014-09-10 11:01
155 查看
运算符重载允许为运算指定用户定义的运算符实现,其中一个或两个操作数是用户定义的类或结构类型。用户定义的运算符实现的优先级总是高于预定义运算符实现:仅当没有适用的用户定义运算符实现时才会考虑预定义运算符实现。
下面的例子中Vector结构表示一个三维矢量:
运算符 | 可重载性 |
+、-、!、~、++、--、true、false | 可以重载这些一元运算符。 true和false运算符必须成对重载。 |
+、-、*、/、%、&、|、^、<<、>> | 可以重载这些二元运算符。 |
==、!=、<、>、<=、>= | 可以重载比较运算符。必须成对重载。 |
&&、|| | 不能重载条件逻辑运算符。 但可以使用能够重载的&和|进行计算。 |
[] | 不能重载数组索引运算符,但可以定义索引器。 |
() | 不能重载转换运算符,但可以定义新的转换运算符。 |
+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>= | 不能显式重载赋值运算符。 在重写单个运算符如+、-、%时,它们会被隐式重写。 |
=、.、?:、->、new、is、sizeof、typeof | 不能重载这些运算符。 |
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 }
相关文章推荐
- c#中的运算符重载
- 不知道C#2.0怎么使用泛型来运算符重载
- C#中关于运算符重载的例子
- c# 类的高级技术2 --------运算符重载
- 对象的比较与排序(五):C#运算符重载
- 介绍 C# 中的运算符重载 .
- c#中的继承,抽象类,接口,运算符重载
- C#运算符重载不是没有用武之地
- 学点C#5 运算符重载 索引器 属性 委托
- C#学习:运算符重载
- C# - 运算符重载
- C#运算符重载
- C# 训练场(二)用运算符重载实现矩阵计算
- C#要求运算符重载必须是public和static
- 温故而知新之C#(二):运算符重载
- c# 中的运算符重载
- C#:浅谈对象数组,运算符重载和深度复制的应用
- C# 运算符重载
- C#运算符重载实现动态SQL生成
- C# 运算符重载和 implicit关键字