Передача большого количества делегатов в качестве аргументов конструктора не является лучшей практикой. Передача их как List<delegate>
может быть еще хуже для меня. Это приносит некоторые дополнительные риски с этим. Но это не должно быть проблемой.
Что если вы попытаетесь передать класс в качестве параметра:
public class MyActions
{
public StrategyDelegate OpenWindow { get; set; }
public StrategyDelegate CloseWindow { get; set; }
}
Но это означает, что методы (объявленные здесь как свойства) можно изменить когда угодно. Вы можете изменить это как структуру, так что она создаст копию, так что действия не могут быть изменены после передачи их конструктору.
Я думаю, что go для наследования, если делегаты не будут не изменяется во время работы:
Я бы создал абстрактный класс:
public abstract class MyBaseClass
{
public abstract void OpenWindow();
public abstract void CloseWindow(); // <-- at least pass a object sender?
}
public class MyClass : MyBaseClass
{
public override void OpenWindow()
{
// you code:
}
public override void CloseWindow()
{
// you code:
}
}
public class ViewConfiguration
{
public MyBaseClass _myBaseClass;
public ViewConfiguration(MyBaseClass myBaseClass)
{
_myBaseClass = myBaseClass;
}
public void CloseWindow()
{
_myBaseClass?.CloseWindow();
}
}