码迷,mamicode.com
首页 > Windows程序 > 详细

C#运算符重载

时间:2015-11-25 21:59:00      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

namespace Chapter11
{
   public class AddClass1
   {
       public int val;
       public static AddClass3 operator +(AddClass1 op1, AddClass2 op2)
       {
           AddClass3 returnVal = new AddClass3();
           returnVal.val = op1.val + op2.val;
           return returnVal;
       }
   }
    public class AddClass2
    {
        public int val;
       // public static AddClass3 operator +(AddClass1 op1, AddClass2 op2) //注意不要把相同的运算符添加到多个类中,因为它弄不清使用哪个运算符
       // {
       //     AddClass3 returnVal = new AddClass3();
       //     returnVal.val = op1.val + op2.val;
       //     return returnVal;
       //}
    }
    public class AddClass3
    {
        public int val;
    }
    class Program
    {
        static void Main(string[] args)
        {
            AddClass1 op1 = new AddClass1();
            op1.val = 5;
            AddClass2 op2 = new AddClass2();
            op2.val = 5;
            AddClass3 op3 = op1 + op2;
        }
    }
}

 

技术分享
混合模式下的运算符重载:
namespace Chapter11
{
   public class AddClass1
   {
       public int val;
       public static AddClass3 operator +(AddClass1 op1, AddClass2 op2)
       {
           AddClass3 returnVal = new AddClass3();
           returnVal.val = op1.val + op2.val;
           return returnVal;
       }
   }
    public class AddClass2
    {
        public int val;
       // public static AddClass3 operator +(AddClass1 op1, AddClass2 op2) //注意不要把相同的运算符添加到多个类中,因为它弄不清使用哪个运算符
       // {
       //     AddClass3 returnVal = new AddClass3();
       //     returnVal.val = op1.val + op2.val;
       //     return returnVal;
       //}
    }
    public class AddClass3
    {
        public int val;
    }
    class Program
    {
        static void Main(string[] args)
        {
            AddClass1 op1 = new AddClass1();
            op1.val = 5;
            AddClass2 op2 = new AddClass2();
            op2.val = 5;
            AddClass3 op3 = op1 + op2;
        }
    }
}
View Code

 使用混合类型时操作数的顺序必须与运算符重载的参数顺序相同,除非提供了另外一个重载运算符和倒序的参数;

重载运算符:给类添加的运算符类型成员必须用static.

如:

 1 public class AddClass1
 2 {
 3      public int val;  
 4      public static AddClass1 operator + (AddClass1 op1, AddClass1 op2)
 5     {
 6            AddClass1 returnVal = new AddClass1();
 7            returnVal.val = op1.val + op2.val;
 8            return returnVal;  
 9     }
10 }

 可以重载的运算符:

        一元运算符:+,-,!,~,++,--,true,false

        二元运算符:+,-,*,%,&,/,|,^,<<,>>

        比较运算符:==,!=,<,>,<=,>=

如果重载True和false运算符,就可以在布尔表达式中使用类,例如(if(op1){}).

 

C#运算符重载

标签:

原文地址:http://www.cnblogs.com/cheny3636/p/4995844.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!