运算符重载允许使用“+”、“-”、“=”和“!=”等运算符合并和比较类型。通过在类型中添加运算符重载,可以像使用内置基元类型一样使用该类型。只有在运算对类型具有很直观的意义(例如,支持表示数值的类型的两个实例相加)的情况下,才应进行运算符重载。不应使用运算符重载为非直观运算提供语法快捷方式。

C# 允许用户定义的类型通过使用 operator 关键字定义静态成员函数来重载运算符。
但不是所有的运算符都可被重载.

例子 两个时间相加:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.  
  5. namespace Time  
  6. {  
  7.     class Time  
  8.     {  
  9.         public int Hour{ getset; }  
  10.         public int Minute{ getset; }  
  11.         public int Second { getset; }         
  12.         public Time(int Hour, int Minute, int Second)  
  13.         {  
  14.             this.Hour = Hour;  
  15.             this.Minute = Minute;  
  16.             this.Second = Second;  
  17.         }  
  18.         public Time(Time T)  
  19.         {  
  20.             Hour = T.Hour;  
  21.             Minute = T.Minute;  
  22.             Second = T.Second;  
  23.         }  
  24.         public static Time operator +(Time S, Time H)  
  25.         {  
  26.             Time X = new Time(S);  
  27.             X.Second += H.Second;  
  28.             if (X.Second >= 60)  
  29.             {  
  30.                 X.Second = X.Second - 60;  
  31.                 X.Minute += H.Minute + 1;  
  32.                 if (X.Minute >= 60)  
  33.                 {  
  34.                     X.Minute = X.Minute - 60;  
  35.                     X.Hour += H.Hour + 1;  
  36.                 }  
  37.                 else X.Hour += H.Hour;  
  38.             }  
  39.             else 
  40.             {  
  41.                 X.Minute += H.Minute;  
  42.                 if (X.Minute >= 60)  
  43.                 {  
  44.                     X.Minute = X.Minute - 60;  
  45.                     X.Hour += H.Hour + 1;  
  46.                 }  
  47.                 else X.Hour += H.Hour;  
  48.             }  
  49.         return X;  
  50.         }  
  51.         public string Print()  
  52.         {  
  53.             return "(" + Hour + ":" + Minute + ":" + Second + ")";  
  54.         }  
  55.     }  
  56.         class Program  
  57.     {  
  58.         static void Main(string[] args)  
  59.         {  
  60.             Time T1 = new Time(01, 05, 50);  
  61.             Time T2 = new Time(10, 55, 06);  
  62.             Time T3;  
  63.             T3 = T1 + T2;              
  64.             Console.WriteLine("T1={0}",T1.Print());  
  65.             Console.WriteLine("T2={0}", T2.Print());             
  66.             Console.WriteLine("相加得: T3={0}",T3.Print());  
  67.             Console.ReadKey();  
  68.         }  
  69.     }  
  70. }