Делаешь вместо "переменной" свойство и внутри сеттера вызываешь какой-нибудь метод, который будет уведомлять заинтересованных об изменении.
Например вот так:
public class Test {
private int _someValue;
public int SomeValue
{
get => _someValue;
set {
if(value != _someValue) {
_someValue = value;
NotifyAboutChange(); // То самое "действие"
}
}
}
}
Для этого создается событие: оно вызывается тем методом, где используется переменная. Подписчики события получают информацию о текущем значении переменной и выполняют свой код.
Надо иметь экземпляр события, определяемое через event
Затем, в методе, где изначально создается переменная (ну... т.е под капотом), вызывается событие при каждом изменении переменной. Делаются проверки имеются ли привязанные обработчики события и уже вызываются