Подробные сведения о Действии делегируют в C#

Дом зеркал

Я написал эту игру в Scala. Он с открытым исходным кодом и использует Swing через интерфейсы библиотек Java и Scala.

Scala API прекрасно работает, как показано на иллюстрации oxbox_lakes. Я должен был использовать интерфейс Java только для определенного низкоуровневого управления, такого как пользовательская альфа-композиция.

До того, как библиотека Scala-swing стала стабильной, игра была основана на Scala-Squib , но этот проект приостановил AFAIK.

6
задан user193276 22 October 2009 в 07:06
поделиться

3 ответа

Это просто еще один делегат. Действие объявляется так:

void Action<T>(T item)

Это просто «что-то, что действует на один элемент». Существуют общие перегрузки с большим количеством параметров типа и нормальных параметров. Само по себе Action не является прикладной таблицей решений или чем-то в этом роде - это просто делегат, который может «что-то» делать с элементом.

Пример словаря - это просто словарь со значениями перечисления в качестве ключей и действиями как значениями - так что вы можете найти, что делать на основе значения перечисления, а затем передать ссылку пользователя , чтобы он действовал.

Что касается Func vs Action vs Предикат : Func похож на Action , но возвращает значение.

11
ответ дан 8 December 2019 в 16:05
поделиться

Action, Func и Predicate имеют разные сигнатуры:

void Action <...> (...)
T Func <..., T> (...)
bool Predicate (T)

Action <...> совпадает с Func <..., void>
Предикат совпадает с Func

2
ответ дан 8 December 2019 в 16:05
поделиться

1) Делегаты действия

(Action, Action<T>, Action<T, T2> ...) 

являются делегатами общего назначения, чтобы избежать создания делегатов для многих в вашем приложении. Идея такова:

//- Action    => void method with 0 args
//- Action<T> => void method with 1 arg of type T
//- Action<T, T2> => void method with 2 args of type T et T2
//...

2) что словарь хранит для каждого значения SomeEnum метод, соответствующий этой сигнатуре:

void MethodExample (User arg);

Вот пример:

public Init() {
    deleteUserMethodsByStatus = new Dictionary<SomeEnum, Action<User>>();
    deleteUserMethodsByStatus.Add(UserStatus.Active, user => { throw new BusinessException("Cannot delete an active user."); });
    deleteUserMethodsByStatus.Add(UserStatus.InActive, DoUserDeletion});
}

//This is how you could use this dictionary
public void DeleteUser(int userId) {
    User u = DaoFactory.User.GetById(userId);
    deleteUserMethodsByStatus[u.Status](u);
}

//the actual deletion process
protected internal DoUserDeletion(User u) {
    DaoFactory.User.Delete(u);
}

3) Разница между действием, функцией, предикатом: - действие является недействительным методом (без возвращаемого значения) - функция не является недействительным методом (имеет возвращаемое значение) - предикат должен возвращать логическое значение и принимать 1 аргумент (в основном он отвечает «да» или «нет» на вопросы, принимающие 1 аргумент)

Надеюсь, это поможет.

2
ответ дан 8 December 2019 в 16:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: