Подтвердить что ты не робот

Сохранение списка методов в С#

У меня есть список методов, которые я хотел бы вызвать в определенном порядке. Поэтому я хотел бы сохранить их либо в упорядоченном списке, либо в таблице с указанным индексом. Таким образом, список будет единственным, что изменит день, когда мы хотим изменить порядок вызовов.

Я нашел эту статью, объясняя, как это сделать, используя массив и делегаты. Но я читал в комментариях и в некоторых других местах, что это также можно сделать с помощью Словаря и LinQ. Любые советы?

4b9b3361

Ответ 1

Вы можете определить объекты Action, которые являются делегатами без параметров, которые возвращают void. Каждое действие является указателем на метод.

// Declare the list
List<Action> actions = new List<Action>();

// Add two delegates to the list that point to 'SomeMethod' and 'SomeMethod2'
actions.Add( ()=> SomeClass.SomeMethod(param1) );
actions.Add( ()=> OtherClass.SomeMethod2() );

// Later on, you can walk through these pointers
foreach(var action in actions)
    // And execute the method
    action.Invoke();

Ответ 2

Как насчет Queue<Action>?

var queue = new Queue<Action>();

queue.Enqueue(() => foo());
queue.Enqueue(() => bar());

while(queue.Count != 0)
{
    Action action = queue.Dequeue();
    action();
}

Ответ 3

Почему бы вам не использовать Queue его FIFO, хранить делегаты в Queue и когда вы вызываете Dequeue он будет вызывать ваши методы определенным образом.

Как насчет использования Multicast Delegate, он хранит делегаты в LinkList, поэтому, когда вы вызываете Invoke(), он будет вызван определенным образом.

Ответ 4

Я бы посоветовал посмотреть Шаблон команды. Надеюсь, это то, что вы ищете.

Ответ 5

Вы можете использовать List<>, который подойдет вам очень хорошо:

delegate void MyFunction(...);
List<MyFunction> delegateList;

Если ваш делегат возвращает void, вы можете использовать event. Несколько делегатов могут быть добавлены в один список вызовов событий и будут вызваны в том порядке, в котором они были добавлены.

delegate void MyEvent(...);
event MyEventEventHandler MyEvent;

Dictionary order undefined, и он предназначен для поиска.