Я искал аккуратный ответ на этот вопрос дизайна без успеха. Я не мог найти помощь ни в ". Рекомендации по разработке .NET Framework" , ни в "Руководстве по программированию на С#" . В основном я должен представить шаблон как API, чтобы пользователи могли определять и интегрировать свои алгоритмы в мои рамки следующим образом:
1)
// This what I provide
public abstract class AbstractDoSomething{
public abstract SomeThing DoSomething();
}
Пользователям необходимо реализовать этот абстрактный класс, они должны реализовать метод DoSomething
(который я могу вызвать изнутри и использовать его)
2)
Я узнал, что это также может быть достигнуто с помощью делегатов:
public sealed class DoSomething{
public String Id;
Func<SomeThing> DoSomething;
}
В этом случае пользователь может использовать класс DoSomething
следующим образом:
DoSomething do = new DoSomething()
{
Id="ThisIsMyID",
DoSomething = (() => new Something())
}
Вопрос
Какой из этих двух опций лучше всего подходит для простой, удобной и наиболее понятной для публикации как API?
ИЗМЕНИТЬ
В случае 1: регистрация выполняется таким образом (если MyDoSomething
extends AbstractDoSomething
:
MyFramework.AddDoSomething("DoSomethingIdentifier", new MyDoSomething());
В случае 2: регистрация выполняется следующим образом:
MyFramework.AddDoSomething(new DoSomething());