Не удаётся изменить значение переменной из одного класса в другом. C# DLL

Работаю в VisualStudio. Создал библиотеку классов(NET. Framework) для воспроизведения её в отдельном приложении. В ней класс выполняющий код и класс - библиотека сценариев. Выглядят они так: Основной код:

namespace SmartClick
{
    public class Script : ScriptBase
    {
        bool a;
        public bool err_1;
        public bool err_2;

        /* Constructor */
        public Script()
        {
            Config.Name = "Example Script";
            Config.LoopDelay = 1000;
        }
        // Called when the user pressed play
        public override void Start()
        {
            base.Start();
        }
        // Called every interval set by LoopDelay
        public override void Update()
        {
            Config.Scenes = new List<Scene>()
                {
                new ERROR_1(),
                new ERROR_2()
                };
            a = true;
            while (a)
            {
                Console.Write(".");
                HandleScenes(ERRORS => { a = false; Console.WriteLine(ERRORS.Name); });
                Sleep(100);
            }

            Console.WriteLine(err_1);
            Console.WriteLine(err_2);
            Sleep(3000);
        }
    }
}

Библиотека:

namespace SmartClick
{
    public class ERROR_1 : Scene
    {
        public override string Name => "ERROR_1";
        public static RectMap img_1 = new RectMap()
        {
            X = 108,
            Y = 613,
            Width = 26,
            Height = 3,
            Hash = 17361643688751591424
        };
        public override bool Match(ScriptBase script)
        {
            return script.MatchTemplate(img_1, 85);
        }

        public override void OnMatched(ScriptBase script)
        {
            Script SmartClick = new Script();
            SmartClick.err_1 = true;
            Console.WriteLine("SL_err_1= " + SmartClick.err_1);
        }
    }
    public class ERROR_2 : Scene
    {
        public override string Name => "ERROR_2";
        public static RectMap img_2 = new RectMap()
        {
            X = 165,
            Y = 173,
            Width = 110,
            Height = 23,
            Hash = 35887472787554175
        };
        public override bool Match(ScriptBase script)
        {
            return script.MatchTemplate(img_2, 85);
        }

        public override void OnMatched(ScriptBase script)
        {
            Script SmartClick = new Script();
            SmartClick.err_2 = true;
            Console.WriteLine("SL_err_2= " + SmartClick.err_1);
        }
    }
}

Если кратко, то код берет кусочек экрана и сравнивает с теми сценариями, которые указаны в Config.Scenes, соответственно если какой то из них удовлетворяется, то выполняется код из соответствующего сценария из библиотеки. В них у меня указаны действия присваивания новых значений переменным из основного кода. как только не изгалялся, но в консоли все равно:

.ERROR_1
SL_err_1= True
False
False

Ответы (1 шт):

Автор решения: Igor

Объект (инстанс) типа Script, чей метод Update выполняется, не имеет никакого отношения к объектам new Script(), создаваемым в методе OnMatched.


        Config.Scenes = new List<Scene>()
        {
          new ERROR_1(this),
          new ERROR_2(this)
        };
        ...

public class ERROR_1 : Scene
{
  Script parent;
  public ERROR_1(Script parent) 
  {
    this.parent = parent;
  }
  ...
  public override void OnMatched(ScriptBase script)
  {
    parent.err_1 = true;
    Console.WriteLine("SL_err_1= " + parent.err_1);
  }
} 
→ Ссылка