могут ли элементы массива влиять друг на друга? [закрыт]

236
13 сентября 2018, 14:30

Допустим у меня есть несколько объектов класса, которые содержат в себе по таймеру на события которого подписаны и обработчики этого события. Могут ли они каким-то магическим образом друг на друга повлиять (типа один класс выполнял код обработчика и в это время другой элемент вызвал этот код только содержащийся в нем и соответственно настроил его под себя, а первый этого не знал и продолжил выполняться с измененными данными) внутри кода обработчика сработав почти одновременно?

Answer 1

Неявное влияние элементов обычно не очень хорошо, но возможно. Как простейший пример,

у нас есть менеджер для состояния

public class StateManager
{   
    public event EventHandler<int> StateShaged;
    public void OnStateChanged(int newState)
    {
        this.StateShaged?.Invoke(this, newState);
    }
}

Каждый элемент массива может быть таким:

public class ValueHolder
{
    StateManager _manager;
    public ValueHolder(StateManager manager)
    {
        _manager = manager;
        _manager.StateShaged += (sender, args) => 
        {
            this.Value = args;          
        };          
    }
    public void Boom()
    {
        _manager.OnStateChanged(15);
    }
    public int Value{get;set;}      
}

и сам код работы с этой красотой

var manager = new StateManager();
var array = Enumerable.Range(0, 5)
    .Select(x => new ValueHolder(manager) {Value = x})
    .ToArray();
foreach(var item in array) Console.WriteLine(item.Value);
array[0].Boom();
foreach(var item in array) Console.WriteLine(item.Value);

вывод в консоль

0
1
2
3
4
15
15
15
15
15

Как видите, напрямую каждый элемент не вызывает другой элемент, но взаимодействие происходит неявно.

READ ALSO
Замена кода применяемого в WPF в Winows Forms C#

Замена кода применяемого в WPF в Winows Forms C#

Переношу код с WPF на Windows Forms и столкнулся с такой проблемойЕсть класс - который получает контекст от основного окна в конструктор

256
SOAP или RESTAPI для написания своего API на c#?

SOAP или RESTAPI для написания своего API на c#?

Существует задача: написать свой API для приложения на C#, вопрос очень простой как это лучше реализовать, какие технологии использовать? В процессе...

253
C# работа с базой

C# работа с базой

Ребят, рассчитываю на ваш опыт!

247
Что значит обратный апостроф в c#?

Что значит обратный апостроф в c#?

В одном из примеров встретил такой код:

294