Вот моя программа:Делегат метод или абстрактный класс
class Program
{
//DESIGN 1
abstract class AFoo
{
public string Bar { get; set; }
public abstract string SayHi();
}
class LoudFoo : AFoo
{
public override string SayHi()
{
return this.Bar.ToUpper();
}
}
class QuietFoo : AFoo
{
public override string SayHi() { return this.Bar.ToLower(); }
}
//DESIGN 2
class Foo{
public string Bar { get; set; }
public Func<Foo, string> SayHi { get; set; }
}
static void Main(string[] args)
{
//USING DESIGN 1
var quietFoo2 = new QuietFoo{ Bar = "Mariane"};
var loudFoo2 = new LoudFoo{ Bar = "Ginger"};
Console.WriteLine(quietFoo2.SayHi());
Console.WriteLine(loudFoo2.SayHi());
//USING DESIGN 2
var quietFoo = new Foo
{
Bar = "Felix",
SayHi = (f) => { return f.Bar.ToLower(); }
};
var loudFoo = new Foo
{
Bar = "Oscar",
SayHi = (f) => { return f.Bar.ToUpper(); }
};
Console.WriteLine(quietFoo.SayHi(quietFoo));
Console.WriteLine(loudFoo.SayHi(loudFoo));
}
}
Я могу выполнить «то же самое», - на самом деле не то же самое, но подобные вещи, идущие два различных маршрута.
Design 1) Я могу создать абстрактный класс, который заставляет реализатор этого класса, как SayHi()
--или--
дизайн 2) я мог бы создать класс определяет свойство SayHi, которое является функцией. (Я называю это delegate--, но я не уверен, что это правильный термин для этого здесь)
Design 1 беспокоит меня, потому что это может привести к profliferation классов
еще ...
Дизайн 2 беспокоит меня, потому что он чувствует себя излишним, когда мне нужно иметь Foo на самом деле SayHi().
felix.SayHi(felix)
Вопрос в том, лучше ли использовать дизайн 1 или дизайн 2-- или, возможно, ни один из них. Когда я говорю лучше, я говорю, что более практично с точки зрения возможности поддерживать мою программу. Я столкнулся с этим, когда создал разные классы, которые будут использоваться для загрузки файлов из разных облачных API (Google Диск, Box.com, DropBox) - сначала я создал отдельные классы, но затем я пошел другим путем.
Когда вы говорите «лучше», пожалуйста, квалифицируйте его с помощью каких-либо критериев измерения. Лучше для чего? Читаемость? Представление? Обслуживание? Фаза луны? Что-то другое? – Oded
@Oded - хорошая точка - я добавил еще несколько комментариев - я бы сказал, что лучше было бы «ремонтопригодность» - –
Что относительно Design 3: Частичные классы? – GolezTrol