• C#运算符重载


    本文开发一个Vector结构来说明运算符重载,Vector结构表示一个三维矢量,别担心数学不好,这不是重点。三维矢量只是3个(double)数字的一个集合,说明物体和原点之间的距离,例如(2.0,3.0,5.0)就是表示在三维坐标上x=2.0,y=3.0,z=5.0,这个看不懂,那回家翻书瞧瞧就行。

    注:本文将Vector作为结构开发,而不是类,这也不是问题,运算符重载用于结构和类时都一个样。

    下面是Vector的定义——成员字段、构造函数和重写的ToString()方法,还有重点运算符重载。

     1   struct Vector {
     2         public double x, y, z;
     3 
     4         public Vector (double x,double y,double z ) {
     5             this.x = x; this.y = y; this.z = z;
     6         }
     7 
     8         public Vector ( Vector rhs) {
     9             this.x = rhs.x; this.y = rhs.y; this.z = rhs.z;
    10         }
    11 
    12         //重写ToString方法方便显示Vector的内容
    13         public override string ToString ( ) {
    14             return "(" + x + "," + y + "," + z + ")";
    15         }
    16        
    17         //运算符重载
    18         //C#要求所有的运算符重载都声明为Public和static
    19         public static Vector operator + (Vector lhs, Vector rhs ){
    20             return new Vector ( ) { x=lhs.x+rhs.x ,y =lhs.y+rhs.y ,z=lhs.z +rhs.z  };
    21         }
    22     }

    下面编写一些简单代码来测试Vector结构:

      static void Main ( string[ ] args ) {
                Vector vect1, vect2, vect3;
                vect1 = new Vector ( 4, 5, 6 );
                vect2 = new Vector ( 1, 2, 3 );
                vect3 = vect1 + vect2;
                Console.WriteLine ("vect1:"+ vect1.ToString ());
                Console.WriteLine ( "vect2:" + vect2.ToString ( ) );
                Console.WriteLine ( "vect3:" + vect3.ToString ( ) );
                Console.ReadKey ( );
            }

    注:加法没啥问题,如乘法的重载参数为(Vector lhs, double rhs)时,测试Vect=2*Vect1时将会找不到重载方法导致编译错误(编译器不会自动帮我们交换参数)。

    以上是最简单的运算符重载,当然还可以重载其它运算符,包括逻辑运算符(如==、>= ....),但是重载"=="和"!="的时候还必须重载System.Object中继承的Equals()和GetHashCode(),因为Equals()与"=="运算符是相等的逻辑运算。

    其它的运算符就自己玩去吧。

  • 相关阅读:
    Key&Main Window
    ObjectiveC Runtime IV 【使用隐藏的参数】
    JS中的变量作用域
    Git配置
    ObjectiveC Runtime II 【发送消息 vs 调用函数】
    GDB Vs. WinDbg Commands
    mcs51 串口通信 单片机发 pc收
    csharp截屏
    解决WIN7系统中系统文件的“拒绝访问”的方案
    在VC中创建DLL文件的方法步骤
  • 原文地址:https://www.cnblogs.com/xiaoyu5062/p/2580607.html
Copyright © 2020-2023  润新知