C# 关键字operator


operator 只要是运算符都能重载

operator 关键字的主要作用是用来重载运算符的,还可以用于类或结构中类型的自定义转换。

下面看个例子

        class Feige
        {
            //定义两个全局变量
            int a, b;
 
            //声明带两个参数的构造函数
            public Feige(int a, int b)
            {
                this.a = a;
                this.b = b;
            }
 
            //重载加法运算符+
            public static Feige operator +(Feige f, Feige g)
            {
                return new Feige(f.a + g.a, f.b + g.b);
            }
 
            //重载乘法运算符*
            public static Feige operator *(Feige f, Feige g)
            {
                return new Feige(f.a * g.a, f.b * g.b);
            }
 
            //自定义转换类型
            public static implicit operator int(Feige f)
            {
                return (int)(f.a * f.b);
            }
        }


执行

            //执行构造函数
            Feige fei = new Feige(2, 5);
            //执行构造函数
            Feige ge = new Feige(3, 6);
 
            int d = (int)(fei + ge);//调用运算符+函数
            int e = (int)(fei * ge);//调用运算符*函数
 
            //两对象加法操作结果是:55            
            richTextBox1.Text += "两对象加法操作结果是:" + d + "\n";
            //两对象乘法操作结果是:180
            richTextBox1.Text += "两对象乘法操作结果是:" + e + "\n";

实例二:

  class Salary
    {
        public int RMB { get; set; }

        public static Salary operator +(Salary s1, Salary s2)
        {
            //Salary s = new Salary();
            //s2.RMB += s1.RMB;
            //return s2;

            Salary s = new Salary();
            s.RMB = s2.RMB + s1.RMB;
            return s;
        }
        //注意下面这个重载与上面这个效果执行后的异同   上面是重新声明了个类变量,下面这个执行结果是 s2的类变量RMB
        //public static Salary operator +(Salary s1, Salary s2)
        //{
        //    Salary s = new Salary();
        //    s2.RMB += s1.RMB;
        //    return s2;
        //}
        public static Salary operator -(Salary s1, Salary s2)
        {
            Salary s = new Salary();
            s.RMB = s1.RMB - s2.RMB;
            return s;            
        }      
    
    }

执行

        static void Main(string[] args)
        {
            Salary mikeIncome = new Salary() { RMB = 22 };
            Salary roseIncome = new Salary() { RMB = 33 };
            //Salary familyIncome = Salary.Add(mikeIncome, roseIncome);
            Salary familyIncome = mikeIncome + roseIncome;
            Console.WriteLine(familyIncome.RMB);
            Salary subtractIncome = mikeIncome - roseIncome;
            Console.WriteLine(subtractIncome.RMB);
            Console.ReadKey();

        }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM