terça-feira, 11 de setembro de 2018

Dicas de programação: Reescrevendo operadores em C#

A coisa mais estranha e legal é quando uma linguagem deixa sobrescrever operadores (tipo mais [+] ou vezes [*]).

Podemos fazer barbaridades com isso... Por exemplo, dizer que uma mesma variável não é igual a ela mesma!

Sim, dá para fazer isso em C#:

using System;
namespace Teste
{
    class Program
    {
        ///
        /// Reescrevendo o operador de comparação "igual" (==) da classe Program
        ///

        /// O primeiro objeto a ser comparado
        /// O segundo objeto a ser comparado
        /// Sempre false
        public static Boolean operator ==(Program p1, Program p2)
        {
            //Em qualquer situação, retorno false
            return false;
        }


        ///
        /// Reescrevendo o operador de comparação "diferente" (!=) da classe Program
        ///

        /// O primeiro objeto a ser comparado
        /// O segundo objeto a ser comparado
        /// Sempre true
        public static Boolean operator !=(Program p1, Program p2)
        {
            //Em qualquer situação, retorno true
            return true;
        }


        static void Main(string[] args)
        {
            Program p = new Program();
            Console.WriteLine("Este programa é igual a ele mesmo? " + (p == p ? "Sim" : "Não"));
            Console.ReadKey();
        }
    }
}


Ele sempre vai dizer que p não é igual a p (ou seja, p == p dá false).

Bizarro, não?

Até mais!

Nenhum comentário: