Ahora, mi preguta: ¿Qué es mas conveniente? ¿Utilizar dos listas genéricas en mi clase Empresa para coleccionar por separado objetos de las clases CorredorSeguros y Cliente? ¿O en cambio, utilizar sólo una lista para coleccionar instancias de ambas clases?
Si colecciono los objetos de cada una de las clases por separado, tendría que implementar métodos específicos para cada una de las dos colecciones; en cambio, si los colecciono en una única lista, me ahorro implementar algunos métodos, pero en cambio debería hacer unos cuantos casteos. Y esta única lista sería de tipo Persona, una clase base que la crearía únicamente para derivar de ella mis clases CorredorSeguro y Cliente. Pero como dije, no tienen nada en común, sería una herencia forzosa, ya que la clase base (Persona) sería prácticamente una clase vacía.
Pongo un ejemplo para que todo sea más entendible:
Coleccionando por separado.
Código:
class Empresa
{
List<CorredorSeguros> listaCorredores;
List<Cliente> listaClientes;
public void AgregarCorredor(CorredorSeguros c)
{ }
public CorredorSeguros BuscarCorredor(string nombre)
{ }
public void AgregarCliente(Cliente c)
{ }
public Cliente BuscarClientes(double ci)
{ }
}
class CorredorSeguros
{
string usuario;
}
class Cliente
{
double cedulaIdentidad;
}
Coleccionando en una única lista genérica de tipo Persona.
Código:
class Empresa
{
List<Persona> lista;
public void Agregar(Persona p)
{ }
public Persona Buscar(string usuario)
{ }
public Persona Buscar(double ci)
{ }
}
class Persona
{ }
abstract class CorredorSeguros : Persona
{
string Usuario;
}
class Cliente : Persona
{
double cedulaIdentidad;
}
O sea, lo que gano por un lado lo pierdo por el otro... En el ejemplo, me ahorro implementar dos veces el método Agregar(). Por otra parte, en cuanto al método Buscar(), debo andar verificando si cada elemento de la lista es del tipo que estoy buscando,y después tengo que castear lo que me devuelve el método.