运算符重载
2015-06-05 20:41 糯米粥 阅读(398) 评论(0) 编辑 收藏 举报msdn解释:https://msdn.microsoft.com/zh-cn/library/vstudio/ms229032%28v=vs.100%29.aspx
运算符重载
允许为运算指定用户定义的运算符实现,其中一个或两个操作数是用户定义的类或结构类型。用户定义的运算符实现的优先级总是高于预定义运算符实现:仅当没有适用的用户定义运算符实现时才会考虑预定义运算符实现。
运算符 |
可重载性 |
+、-、!、~、++、--、true、false |
可以重载这些一元运算符。 |
+、-、*、/、%、&、|、^、<<、>> |
可以重载这些二元运算符。 |
==、!=、<、>、<=、>= |
可以重载比较运算符。必须成对重载。 |
&&、|| |
不能重载条件逻辑运算符。 |
[] |
不能重载数组索引运算符,但可以定义索引器。 |
() |
不能重载转换运算符,但可以定义新的转换运算符。 |
+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>= |
不能显式重载赋值运算符。 |
=、.、?:、->、new、is、sizeof、typeof |
不能重载这些运算符。 |
我们知道。是不能直接对引用类型进行运算的。如果想运算。就要进行运算符重载。现在来写一个Student(学生类)实现对age的"加"和"比较大小"
因为是测试。这里只简单的写一个字段 age
1 class Student 2 { 3 /// <summary> 4 /// 学生年龄 5 /// </summary> 6 public int age; 7 8 /// <summary> 9 /// + 运算符重载 10 /// </summary> 11 /// <param name="s1"></param> 12 /// <param name="s2"></param> 13 /// <returns></returns> 14 public static int operator +(Student s1, Student s2) 15 { 16 return s1.age + s2.age; 17 } 18 19 /// <summary> 20 /// > 比较运算符 。这里要求也要定义匹配的运算符 "<" 也就是下面的运算符重载 21 22 /// </summary> 23 /// <param name="s1"></param> 24 /// <param name="s2"></param> 25 /// <returns></returns> 26 public static bool operator >(Student s1, Student s2) 27 { 28 return s1.age > s2.age; 29 } 30 public static bool operator <(Student s1, Student s2) 31 { 32 return s1.age < s2.age; 33 }
现在编写一个测试代码试试
1 class Program 2 { 3 static void Main(string[] args) 4 { 8 //测试代码 9 Student s1 = new Student() { age = 90 }; 10 Student s2 = new Student { age = 9 }; 11 12 Console.WriteLine(s1 + s2); //这样就实现了引用类型相加 实际是内部的age相加 就不需要s1.age+s2.age 13 Console.WriteLine(s1 > s2); //引用类型比较大小 14 Console.ReadLine(); 15 16 } 17 }
至此。就完成了运算符的重载。