É possível enviar um parâmetro do tipo ContaCorrente, por exemplo, para um método que espera um tipo genérico T, e dentro deste método utilizar T como ContaCorrente?
É possível enviar um parâmetro do tipo ContaCorrente, por exemplo, para um método que espera um tipo genérico T, e dentro deste método utilizar T como ContaCorrente?
Olá Philippe, tudo certo?
Pode sim! O que determina qual tipo é aceito, é o tipo declarado na construção do objeto. Você poderia fazer:
Lista<ContaCorrente> listaDeContaCorrente = new Lista<ContaCorrente>();
E para popular a lista, só é aceitável valores que correspondem a uma ContaCorrente
.
Bons estudos!
Olá, Philippe, tudo bem?
Fiz um exemplo simples de um método genérico só para complementar a explicação anterior.
using System;
namespace ConsoleApp1
{
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var conta = new ContaCorrente()
{
Saldo = 1000
};
var conta2 = new ContaCorrente()
{
Saldo = 10
};
conta.Soma(conta2);
Console.WriteLine(conta.Saldo);
Console.ReadKey();
}
}
public class ContaCorrente
{
public double Saldo { get; set; }
public void Soma<T>(T obj)
{
ContaCorrente conta2 = obj as ContaCorrente;
if (conta2 != null)
{
this.Saldo = this.Saldo + conta2.Saldo;
}
else
{
throw new ArgumentException("Parametro com tipo inválido");
}
}
}
}
Então, na verdade eu queria fazer algo um pouco mais fora de linha. Eu queria enviar um Tipo para um método que vive em outro Projeto, que representa uma camada Anticorrupção e que esta camada não conhece o Tipo que estou enviando... um projeto LegacyAdapter, por exemplo. Daí, a intenção deste método seria buscar dados legados e convertê-los no Tipo que eu passei. Portanto, eu queria instanciar, talvez por reflexão, este Tipo Genérico que a camada não conhece a classe concreta. Resumindo, eu quero passar um Type para uma aplicação que não conhece esse Type, e ela se vira pra me devolver dados formatados com o Type que passei.
Sinceramente não sei se funcionaria com um tipo tão genérico assim. Geralmente se usa interfaces para não tornar o acoplamento tão impactante. Mas já testou fazer uma lista de Object
? Afinal, essa seria a classe mais genérica possível.
Pode ser que tenha alguma perda de desempenho como é tratado na documentação.
Será que essa lista de Object
te ajudaria?