prefieren utilizar la composición, sobre la herencia
En primer lugar decir que tenemos un usuario;
public interface IUser
{
public String Name { get; }
public String Surname { get; }
}
public class User : IUser
{
public User(String name, String surname)
{
this.Name = name;
this.Surname = surname;
}
public String Name { get; private set; }
public String Surname { get; private set; }
}
Ahora, imaginemos que por cualquier razón, usted está obligado a tener un adaptador para la clase de usuario, entonces tenemos dos aproaches, por herencia, o compuesto;
//Inheritance
public class UserAdapter1 : User
{
public String CompleteName { get { return base.Name + " " + base.Surname } }
}
//Composition
public class UserAdapter2
{
private IUser user;
public UserAdapter2(IUser user)
{
this.user = user;
}
public String CompleteName { get { return this.user.Name + " " + this.user.Surname; } }
}
usted está totalmente bien, pero sólo si el sistema no crecen ... Imagínese que usted está obligado a implementar una clase de superusuario, con el fin de hacer frente a un nuevo requisito;
public class SuperUser : IUser
{
public SuperUser(String name, String surname)
{
this.Name = name;
this.Surname = surname;
}
public String Name { get; private set; }
public String Surname { get; private set; }
public Int32 SupernessLevel { get { return this.Name.Length * 100; } }
}
Mediante el uso de la herencia que no sería capaz de volver a utilizar su clase adaptador, echar a perder su código (como su tendrían que aplicar otro adaptador, heredando de superusuario que haría ECXATLY lo mismo de la otra clase !!!) ... El uso de la interfaz se trata de uncopling, esa es la razón principal por la que tengo 99% de probabilidad de usarlos, por supuesto, si la elección depende de mí.