Я создаю серию классов Interfaces / Abstract, которые содержат базовые свойства, и я хотел бы иметь вычисляемые свойства и множественное наследование.
public abstract class /interface Modifiable
{
public DateTime ModifiedDate {get; set;}
public boo ModifiedToday
{
get { return DateTime.Now.AddDays(-1).CompareTo(ModifiedDate) >= 0; }
}
public bool ModifiedInLastWeek
{
get { return DateTime.Now.AddDays(-7).CompareTo(ModifiedDate) >= 0; }
}
}
public abstract class /interface Deletable
{
public DateTime DeletionDate {get; set;}
public bool Deleted
{
get { return DeletionDate != default(DateTime) }
}
}
Тогда у меня есть класс, который наследует от этих двух интерфейсов / абстрактных классов.
public class Something : Modifiable, Deletable
{
//
}
Но класс не может наследоваться от двух абстрактных классов. Поэтому мне нужно использовать интерфейсы, но с интерфейсами я не могу иметь тела методов. Затем я должен определить одни и те же точные функции для нескольких классов, чтобы реализовать эти простые свойства bool с использованием интерфейсов.
Я также не хочу, чтобы Modifiable наследовал от Deletable, потому что я мог бы хотеть, чтобы что-то было Modifiable, но не Deletable. Эти конкретные классы не являются моей проблемой, я просто использую их, чтобы проиллюстрировать мою проблему.
Существует ли шаблон проектирования, который имитирует абстрактный класс, разрешая тела функций, но допускает множественные наследники, такие как интерфейс?