A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 袁晓俊 于 2014-5-11 16:21 编辑

操作符重载,求细说和代码案例有注释。感谢。

3 个回复

倒序浏览
  同求这个疑难杂症.....
回复 使用道具 举报
本帖最后由 小狸 于 2014-5-11 16:11 编辑

    C#运算符的重载,依照我的理解,就是在类和结构中重新定义运算符,使得对象和对象之间能够进行我们想要的操作.    一个例子:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace _运算符的重载
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             Vector v1, v2, v3;
  12.             bool b;
  13.             v1 = new Vector(3.0, 3.0, 1.0);
  14.             v2 = new Vector(2.0, -4.0, -4.0);
  15.             v3 = v1 + v2;
  16.             b = v1==v2;
  17.             Console.WriteLine("V1={0}",v1.ToString());
  18.             Console.WriteLine("V2={0}", v2.ToString());
  19.             Console.WriteLine("V3={0}", v3.ToString());
  20.             Console.WriteLine("v1=v2? {0}", b);
  21.       
  22.             Console.ReadLine();

  23.         }
  24.         struct Vector
  25.         {
  26.             public double x, y, z;
  27.             public Vector(double x, double y, double z)
  28.             {
  29.                 this.x = x;
  30.                 this.y = y;
  31.                 this.z = z;

  32.             }
  33.             public Vector(Vector rhs)   
  34.            {
  35.                x = rhs.x;
  36.                y = rhs.y;
  37.                z = rhs.z;
  38.             }
  39.             public override string ToString()
  40.             {
  41.                 return "("+x+","+y+","+z+")";
  42.             }
  43.             public static Vector operator +(Vector ihs, Vector rhs)
  44.             {
  45.                 Vector result = new Vector(ihs);
  46.                 result.x += rhs.x;
  47.                 result.y += rhs.y;
  48.                 result.z += rhs.z;
  49.                 return result;
  50.             }
  51.             public static bool operator ==(Vector ihs,Vector rhs){
  52.                if(ihs.x==rhs.x&&ihs.y==rhs.y&&ihs.z==rhs.z)
  53.                {
  54.                     return true;
  55.                }
  56.                else
  57.                {
  58.                     return false;
  59.                }
  60.                               
  61.             }
  62.             public static bool operator !=(Vector ihs, Vector rhs) {
  63.                 return !(ihs==rhs);
  64.             }
  65.         }
  66.     }
  67. }
复制代码

          上面的这个例子定义了一个结构Vector,它的含义是一个三点的坐标矢量.public static Vector operator +  就是在Vector中对+运算符的重载.当我们调用V1+V2时,operator 关键字会告诉编译器说,这是我定义的操作符.那么编译器就会直接进行三点坐标的相加运算了.
          当然重载操作符,还可以用于逻辑运算符.
          还是上面的例子,我们想要达到比较三点坐标是否相同,显然判断两个对象的引用是否相同不是我们的目的.
          通过public static bool operator ==()和public static bool operator !=()来重载,比较他们的三点的坐标.
          ==()和!=()必须是成对出现的
          在C#中重载运算符必须是以public 和 static修饰的.
          C#可以进行重载的操作符:





         像上表说的,这个例子中,重载== 时就必须true false 成对出现


评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
3Q,,,,,,,,,,,,,,,,,,,,,,,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马