Hoje veremos como definir um operador de conversão para converter de um tipo para outro na linguagem C#. |
No entanto, às vezes você pode precisar copiar um valor em uma variável ou parâmetro de método de outro tipo; ou pode precisar atribuir uma variável de classe a uma variável de um tipo de interface. Esses tipos de operações são chamados conversões de tipo. Dentro os tipos de conversões tempos as conversões explicitas e sa implícitas.
A palavra-chave implicit é usada para declarar um operador de conversão implícita de tipo definido pelo usuário. Use-a para habilitar conversões implícitas entre um tipo definido pelo usuário e outro tipo, se houver garantia de que a conversão não causará perda de dados.
A palavra-chave explicit declara um operador de conversão de tipo definido pelo usuário que deve ser invocado com uma conversão. Ela é usada na sobrecarga de operador.
Suponha que você deseja criar um operador para realizar conversões de/para um tipo que você criou.
Você pode especificar como seu tipo é convertido em outros tipos e, igualmente, como outros tipos são convertidos em seu tipo, declarando operadores de conversão em sua classe.
Um operador de conversão é um método estático que é nomeado para o tipo que você deseja converter e que tem o tipo que você deseja converter.
No código abaixo temos um método onde um operador de conversão do tipo Palavra (que veremos a seguir) que converte uma instância de uma string em uma instância do tipo Palavra:
public static explicit operator Palavra(string str)
{
return new Palavra() { Text = str };
}
|
A definição desse membro na classe
Palavra permite realizar
conversões como as seguintes:
Palavra palavra = (Palavra)"Olá";
Observe que tivemos que converter explicitamente a
string para Palavra - isso
ocorre porque nosso operador de conversão incluiu a
palavra-chave explicit.
Você pode ativar a conversão implícita usando a palavra-chave implicit, assim:
public static implicit operator Palavra(string str)
{
return new Palavra() { Text = str };
}
|
Agora, com a palavra-chave
implicit, as duas instruções a seguir seriam compiladas:
Palavra palavra = (Palavra) "Olá";
Palavra palavra = "Olá";
Lembrando que os operadores de conversão devem sempre
ser estáticos e você deve escolher entre uma conversão
explicita ou implícita; você não pode definir
operadores de conversão diferentes para o mesmo par de
tipos e
com palavras-chave diferentes.
A seguir vamos criar um projeto C# do tipo Console na plataforma .NET Core e mostrar isso na prática.
recursos usados:
Criando o projeto C# no VS 2019
Crie um projeto Console do tipo .NET Core chamado Cshp_OperadorConversao1;
Crie a classe Palavra no arquivo Palavra.cs no projeto com o código abaixo:
Agora vamos testar as conversões incluindo o código a seguir no método Main da classe Program:
Executando o projeto teremos:
Concluindo...
Vimos assim a
utilização do operador de conversão implicit e explicit
para o tipo Palavra, ou seja, um tipo
definido pelo usuário pode definir uma conversão implícita ou explícita
personalizada de ou para outro tipo.
As conversões implícitas não exigem que uma sintaxe especial seja invocada e
podem ocorrer em várias situações, por exemplo, em designações e invocações de
métodos.
As conversões implícitas pré-definidas na linguagem C# sempre são bem-sucedidas e nunca lançam uma exceção.
As conversões
implícitas definidas pelo usuário também devem se comportar dessa maneira. Se
uma conversão personalizada puder gerar uma exceção ou perder informações,
defina-a como uma conversão explícita.
Conversões definidas pelo usuário não são consideradas pelos operadores
is e as. Use o operador de conversão
() para chamar uma conversão explícita definida
pelo usuário.
Pegue o código do projeto aqui: CShp_OperadorConversao1.zip
"Quem tem o Filho tem a
vida; quem não tem o Filho de Deus não tem a vida."
1
João 5:12
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
ASP .NET Core 2.0 - Iniciando com NET CLI e VS Code - Macoratti.net