C# объект по имени в статическом методе

Мой вопрос: могу ли я определить статический метод "meth1" в статическом классе "classB", который при вызове из "classA" ищет определенное поле (в "classA", а не в классе, в котором он определен)? Я пытаюсь объяснить лучше: мне нужно сделать что-то вроде этого:

public class classA
{
  string someText;
  int anInt;
  bool trueOrFalse;

  public classA()
  {
    ...
    ...
    var variable = classB.meth1("variableName");
    ...
    ...
  }
}

public static classB
{
  public static object meth1(string name)
  {
  ...
  ... //use "name" to find the variable with that name in the class from which "meth1" is called.
  ...
  }
}

Это потому, что я должен прочитать резервную копию "значений последнего запуска" переменных, содержащихся в файле.txt, записанных построчно как "имя переменной = значение". Поэтому я читаю.txt, создаю хеш-таблицу "backupHashtable", которая содержит ("имя переменной";"значение"), а затем я хочу искать переменные по строке "имя переменной" и сбрасывать их в "значение". Если кто-то из вас знает лучшую процедуру, я слушаю. Может быть, использование словаря?

Спасибо!

ОБНОВЛЕНИЕ

Хорошо, теперь у меня есть более четкое представление о том, что я хочу сделать: я хочу реализовать класс "ClassB", отдельный от моего основного класса "classA". В этом новом классе у меня был бы метод "meth1", который, работая в отдельном потоке, каждые 10 секунд (например) сохраняет состояние некоторых переменных, принадлежащих "classA". Чтобы передать "meth1", какие переменные он должен сохранить, я хочу использовать список, содержащий имена (в формате "строка", это то, что я думал, но я думаю, что это не единственный способ) этих переменных,

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

Теперь, пожалуй, более понятно, что я говорил раньше.

1 ответ

Да, но вам также нужно передать ссылку на экземпляр A. Затем используйте отражение, чтобы получить или установить свойство.

public static void Meth1(object obj, string propertyName)
{
    var prop = obj.GetType().GetProperty(propertyName);
    var value = prop.GetValue(obj);
    ...
}

Если бы я получал значения из текстового файла в класс, я бы сначала загрузил их в словарь, а затем установил все свойства по одному. (Может быть, если нет, скажем, сотни свойств). При использовании отражения существует вероятность, что текстовый файл содержит имя свойства, которое вы не хотите изменять извне.

object value;
if (dict.TryGetValue("someProperty", out value)) { a.SomeProperty = value; }
Другие вопросы по тегам