C# - Sobrecarga de operadores - III
Hoje vamos recordar o conceito de sobrecarga de operadores na linguagem C#. |
Continuando o assunto Sobrecarga de operadores veremos agora a sobrecarga de operadores de comparação (==, !=, <, >, <=, >= ). Esses são os operadores binários que podemos sobrecarregar na linguagem C#.
Sobrecarga de Operador de Comparação
O operador de comparação opera em dois operandos e retorna o valor booleano quando compara o valor do lado esquerdo do operando com o valor do operando do lado direito.
Os operadores de comparação, bem como verdadeiro e falso, devem ser sobrecarregado em pares. Por exemplo, ao sobrecarregar o operador igual(=) significa que o operador não igual (!=) também precisa ser sobrecarregado.
Sintaxe:
public static bool
operator op (Type1 t1,
Type2 t2) { // TODO: } |
Exemplo 1 : Sobrecarga dos operadores > e <
Neste exemplo temos a sobrecarga do operador de comparação < e também do operador >
public class Distancia
{
public double metros { get; set; }
public static bool operator <(Distancia d1, Distancia d2)
{
return (d1.metros < d2.metros);
}
public static bool operator >(Distancia d1, Distancia d2)
{
return (d1.metros > d2.metros);
}
}
|
Observe que temos que fazer a sobrecarga dos operadores > e <.
No código abaixo usamos o namespace :
using static System.Console;
class Program
{
static void Main(string[] args)
{
Distancia d1 = new Distancia { metros = 149.600 };
Distancia d2 = new Distancia { metros = 227.940 };
if (d1 < d2)
{
WriteLine($"{d1.metros} é menor que {d2.metros}");
}
else if (d1 > d2)
{
WriteLine($"{d2.metros} é menor que {d1.metros}");
}
}
}
|
Quando este código for executado, será feita a avaliação usandos os operadores sobrecarregados < e > que retornam true ou false.
Sobrecarga de operadores e herança
Mesmo que os operadores sobrecarregados sejam declarados como estáticos, eles são herdados para as classes derivadas.
Como a declaração do operador sempre requer a classe ou estrutura na qual o operador é declarado, para participar da assinatura do operador, não é possível para um operador declarado em uma classe derivada ocultar um operador declarado em uma classe base.
Assim, o novo modificador new é obrigatório e nunca é permitido em uma declaração de operador.
Sobrecarga de operadores: restrições
Existem ainda as seguintes restrições na
sobrecarga de operadores.
• Você não pode Criar um novo operador;
• Não pode Alterar a sintaxe de um operador;
• Não pode Redefinir como um operador trabalha nos tipos predefinidos;
• Não pode Alterar a precedência ou associatividade de um operador;
Sobrecarga de operadores : cuidados
Se o seu objeto operando for um
objeto de tipo de valor, a sobrecarga deve
funcionar bem. Mas você precisa ser um pouco cuidadoso quando seu tipo definido
pelo usuário for um tipo de referência.
Para um objeto de tipo de referência, as pré-operações
devem funcionar bem porque não são feitas cópias. Mas para as
pós-operações, a cópia salva é uma cópia da referência, isso significa
que tanto a cópia original como a de referência estão apontando para o mesmo
objeto.
Então, quando a segunda etapa for executada, o código de incremento ou decremento é executado naquele objeto. Isso significa que a referência salva aponta para um objeto não está mais em seu estado original e isso pode levar a resultados inesperados.
Pegue o código do projeto aqui: SobrecargaOperadorComparacao.txt
João
14:21
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
VB .NET e C# - Diferenças entre os Operadores - Macoratti
VB.NET - Novos operadores lógicos - Macoratti
C# - Sobrecarga de operadores - Macoratti
NET - Estruturas x Classes - Macoratti
VB.NET - Novos operadores lógicos - Macoratti
C# - Sintaxe e conceitos básicos - Macoratti
C# - Operadores Lógicos - Macoratti
C# - Conceitos - Operador Ternário - Macoratti