.NET 4.x Как изменять значение переменной bool, который находится в объекте, если я его передал в другой класс - C#
Формулировка задачи:
У меня есть статический объект Vars.MainConfig и в нем есть 2 bool Vars.MainConfig.Hello и Vars.MainConfig.Goodbye.
Так же у меня есть keyboard hook, которым вызывается функцию Work() при любом нажатие на клавиатуру.
Я хочу сделать динамическую систему биндов, что бы когда я нажимал допустим F1, менялось значения для Vars.MainConfig.Hello. А когда я нажимал на F2 менялось значение для Vars.MainConfig.Goodbye. Хочу получить класс который сможет работать с любыми bool и переключать их. Кол-во bool заранее не известно.
Вот мой класс
public class Binds
{
public static Dictionary<int, BindAction> List;
public static Dictionary<string, BindAction> Commands;
public Binds()
{
Commands = new Dictionary<string, BindAction>
{
{ @"On\Off Hello", new BindAction(Vars.MainConfig.Hello) },
{ @"On\Off Goodbye", new BindAction(Vars.MainConfig.Goodbye) }
};
List = new Dictionary<int, BindAction>
{
{ (int)Keys.F1, Commands[@"On\Off Hello"] },
{ (int)Keys.F2, Commands[@"On\Off Goodbye"] }
};
}
public static void Work()
{
try
{
List[InterceptKeys.vkCode].Action = !List[InterceptKeys.vkCode].Action;
Console.WriteLine("Hello: " + Vars.MainConfig.Hello);
Console.WriteLine("Goodbye: " + Vars.MainConfig.Goodbye);
}
catch (KeyNotFoundException)
{
Console.WriteLine("Not binded");
}
}
public class BindAction
{
public BindAction(bool action)
{
Action = action;
}
public bool Action;
}
}Решение задачи: «.NET 4.x Как изменять значение переменной bool, который находится в объекте, если я его передал в другой класс»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Threading;
namespace Binds
{
class Program
{
public static int Key = 0;
static void Main(string[] args)
{
var test = new Test
{
SomeVariable = false,
OtherVariable = true
};
var bind = new Binds(test);
while (true)
{
Console.Clear();
Key++;
Binds.Work();
Console.WriteLine("Original SomeVariable: " + test.SomeVariable);
Console.WriteLine("Original OtherVariable: " + test.OtherVariable);
if (Key == 2)
Key = 0;
Thread.Sleep(500);
}
}
}
class Test
{
public bool SomeVariable { get; set; }
public bool OtherVariable { get; set; }
}
class Binds
{
public static Dictionary<int, BindAction> List;
public static Dictionary<string, BindAction> Commands;
public Binds(Test test)
{
Commands = new Dictionary<string, BindAction>
{
{ @"Вкл\Выкл SomeVariable", new BindAction { Action = test.SomeVariable } },
{ @"Вкл\Выкл OtherVariable", new BindAction{ Action = test.OtherVariable } }
};
List = new Dictionary<int, BindAction>
{
{ 1, Commands[@"Вкл\Выкл SomeVariable"] },
{ 2, Commands[@"Вкл\Выкл OtherVariable"] }
};
}
public static void Work()
{
try
{
Console.WriteLine("Action: " + List[Program.Key].Action);
List[Program.Key].Action = !List[Program.Key].Action;
Console.WriteLine("Changed Action: " + List[Program.Key].Action);
}
catch (KeyNotFoundException)
{
Console.WriteLine("Not binded");
}
}
public class BindAction
{
public int Key { get; set; }
public bool Action { get; set; }
}
}
}