Я знаю, что этой функции нет в C #, но PHP недавно добавил функцию под названием Traits , которую я сначала считал немного глупой, пока не начал об этом думать.
Скажем, у меня есть базовый класс с именем Client
. Client
имеет единственное свойство, называемое Name
.
Сейчас я разрабатываю повторно -полезное приложение, которое будет использоваться множеством разных клиентов. Все клиенты согласны с тем, что у клиента должно быть имя, поэтому оно относится к базовому классу -.
Теперь приходит клиент А и говорит, что ему также нужно отслеживать вес клиента.Клиенту Б не нужен вес, но он хочет отслеживать рост. Клиент C хочет отслеживать как вес, так и рост.
С чертами мы могли бы сделать чертами как вес, так и рост:
class ClientA extends Client use TClientWeight
class ClientB extends Client use TClientHeight
class ClientC extends Client use TClientWeight, TClientHeight
Теперь я могу удовлетворить все потребности моих клиентов, не добавляя в класс ничего лишнего. Если мой клиент вернется позже и скажет: «О, мне очень нравится эта функция, можно мне ее тоже?», я просто обновлю определение класса, включив дополнительную черту.
Как бы вы сделали это в C #?
Интерфейсы здесь не работают, потому что мне нужны конкретные определения свойств и любых связанных с ними методов, и я не хочу -реализовывать их повторно для каждой версии класса.
(Под «клиентом» я подразумеваю буквального человека, который нанял меня в качестве разработчика, тогда как под «клиентом» я подразумеваю класс программирования; у каждого из моих клиентов есть клиенты, о которых они хотят записать информацию)