Я ищу советы о том, как лучше всего реализовать следующее:
У меня есть класс, который получает ввод, скажем, каждую секунду и запускает событие при получении этого ввода (отправляя вместе с ним информацию овходные данные).
Это событие подписано несколькими другими классами.
Каждый из этих классов имеет:
- «ранжирование» (
int
поле),
- метод bool
Condition
(который проверяет условие на основе входных данных события) и метод с именем run.
Когда событие вызывается, все классы вызывают метод Condition
.при условии, что метод возвращает true, я бы хотел, чтобы метод run вызывался только для класса с самым высоким рейтингом.
Способ, которым я его реализую, - это когда событие вызывается, все классы добавляют ранжирование иметод run к списку (рейтинг 0 добавляется, если условие не выполняется).
Когда список достигает установленного значения, он выбирает самый высокий рейтинг и вызывает связанный метод.
Здесьэто код:
class mainClass
{
void Input(int input)
{
goEvent?.Invoke(input);
}
public event Action<int> goEvent;
public int TEMP_COUNTER=0;
public int TEMP_RANK=0;
public string TEMP_METHODNAME = "";
}
class class1
{
//...
int rank = 4;
bool condition(int n)
{
if(n > 10)
return true;
else
return false;
}
void run(){}
void mainClassEventHandler(int input)
{
if (condition(input)
{
addtolist(rank,run)
}
else
{
addtolist(0,null)
}
}
}
class class2
{
//...
int rank = 3;
bool condition(int n)
{
if(n > 20)
return true;
else
return false;
}
void run(){}
void mainClassEventHandler(int input)
{
if (condition(input)
addtolist(rank,run)
else
addtolist(0,null)
}
}