Не удаётся изменить значение переменной из одного класса в другом. 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 шт):
Объект (инстанс) типа 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);
}
}