代码改变世界

运算符重载

2015-06-05 20:41  糯米粥  阅读(398)  评论(0编辑  收藏  举报

msdn解释:https://msdn.microsoft.com/zh-cn/library/vstudio/ms229032%28v=vs.100%29.aspx

运算符重载

允许为运算指定用户定义的运算符实现,其中一个或两个操作数是用户定义的类或结构类型。用户定义的运算符实现的优先级总是高于预定义运算符实现:仅当没有适用的用户定义运算符实现时才会考虑预定义运算符实现。

 

运算符

可重载性

+、-、!、~、++、--、true、false

可以重载这些一元运算符。
  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     }

 

至此。就完成了运算符的重载。