Al igual que en C++ también podemos sobrecargar operadores en C#. Desde los aritmeticos binarios (+, -, *,..), comparativos, unarios(++), hasta Equals. Este ejemplo no muy útil muestra un poco la forma de sobrecargar operadores, no tiene mucho misterio pero hay que fijarse bien en los parámetros y returns para cada caso. /** * SobrecargaOperadores.cs * Este archivo muestra como sobrecargar operadores * en concreto los binarios simples: +,-,*,/.%, etc.. */ using System; // Definimos una clase tiempo // y una serie de operadores para sumar minutos, segundos, etc.. public class Tiempo { // Atributo de milisegundos private long milisegundos; // Property para acceder a él public long momento { get { return milisegundos; } set { milisegundos = value; } } // Constructor public Tiempo () { DateTime t = DateTime.Now; momento = t.Millisecond; } // Constructor sobrecargado public Tiempo (long milisegundos) { momento = milisegundos; } // SOBREGARCA DE OPERADORES // Sobrecarga de + static public Tiempo operator + (Tiempo t, long val) { // Y devolvemos el objeto tiempo Tiempo tiempoTmp = new Tiempo(t.momento); tiempoTmp.momento = t.momento + val; return tiempoTmp; } // Sobrecarga de - static public Tiempo operator - (Tiempo t, long val) { // Y devolvemos el objeto tiempo Tiempo tiempoTmp = new Tiempo(t.momento); tiempoTmp.momento = t.momento - val; return tiempoTmp; } // Sobrecarga de operadores unarios: ++, -- static public Tiempo operator ++ (Tiempo t) { System.Console.WriteLine("Estamos incrementando..."); Tiempo tiempoTmp = new Tiempo(); tiempoTmp.momento = t.momento + 1; return tiempoTmp; } static public Tiempo operator -- (Tiempo t) { Tiempo tiempoTmp = new Tiempo(); tiempoTmp.momento = t.momento - 1; return tiempoTmp; } // Operadores de COMPARACION: devuelve un booleano static public bool operator < (Tiempo primer, Tiempo segundo) { return (primer.momento < segundo.momento); } // Operadores de COMPARACION: devuelve un booleano static public bool operator > (Tiempo primer, Tiempo segundo) { return (primer.momento > segundo.momento); } // Sobrecargando Equals. este debe decidir si los dos objetos // son efectivamente iguales. Por tanto hay que comparar atributo // por atributo, en este caso será fácil, casi equivalente a == public override bool Equals (Object objeto) { return ( ((Tiempo)objeto).momento == this.momento); } // Sobrecarga GetHashCode public override int GetHashCode () { return this.ToString().GetHashCode(); } // Método principal public static void Main() { Tiempo hoy = new Tiempo(); Tiempo otroDia = new Tiempo(5434454323); System.Console.WriteLine("Valor de hoy {0}", hoy.momento); System.Console.WriteLine("Valor de otroDia {0}", otroDia.momento); // Probamos algunos operadores hoy++; otroDia = hoy + 24; if (hoy < otroDia) { System.Console.WriteLine("Otrodia {0} es mayor que hoy {1}", otroDia.momento, hoy.momento); } else { System.Console.WriteLine("Otrodia {0} es menor que hoy {1}", otroDia.momento, hoy.momento); } } }