Предпочитают использовать композицию, а не наследование
Во-первых, скажем, у нас есть пользователь;
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; }
}
Теперь представьте, что по любой причине вам необходим адаптер для класса пользователя.тогда у нас есть два подхода: по наследству или по составному:
//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; } }
}
С вами все в порядке, но только если система не растет ... Представьте, что вам необходимо реализовать класс SuperUser, вчтобы справиться с новым требованием;
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; } }
}
Используя наследование, вы не сможете повторно использовать свой класс адаптера, портя свой код (как если бы вам пришлось реализовать другой адаптер, наследующий от SuperUser)это сделало бы ТОЧНО то же самое, что и в другом классе !!!) ... Использование интерфейса - это все, что нужно для разблокировки, это главная причина того, что я на 99% могу использовать их, конечно, если выбор за мной.