静态方法

时间:2016-11-16 15:12:43

标签: c# multithreading static-methods static-classes objectname

我的问题是:我可以在静态类“classB”中定义静态方法“meth1”,当从“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”,其中包含(“变量名”;“值”),然后我想用字符串“变量名”搜索变量并将它们重置为“value”。 如果有人知道我正在听的更好的程序。也许使用字典?

谢谢!

UPDATING

好的,现在我对我想做的事情有了更清楚的认识:我想实现一个类“ClassB”,与我的主类“classA”分开。在这个新类中,我将有一个“meth1”方法,它在一个单独的线程中运行,每10秒(例如)保存一些属于“classA”的变量的状态。为了传达“meth1”他必须保存的变量是什么,我想使用一个包含这些变量的名称的列表(格式为“string”,这就是我的想法,但我想这不是唯一的方法)

如果您想知道我为什么要在单独的线程中执行此操作,答案是:我的应用程序对来自多个摄像机的实时流图像中的某些对象执行某些识别操作,然后必须尽可能地隔离辅助操作从主代码中提高执行速度。

现在,或许,我之前所说的更容易理解。

1 个答案:

答案 0 :(得分: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; }