【问题标题】:c# object by name in static methodc# 静态方法中的对象名称
【发布时间】:2017-03-30 20:34:45
【问题描述】:

我的问题是:我可以在静态类“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”,然后我想通过字符串“变量名”搜索变量并将它们重置为“值”。 如果你们中的某个人知道更好的程序,我正在听。也许使用字典?

谢谢!

更新

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

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

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

【问题讨论】:

  • 您是否尝试实现序列化程序?为什么不使用现有的?
  • 我很困惑 - 为什么你需要 meth1返回你调用它的类中的值?您能否提供更多示例代码来显示您在任一类中尝试执行的操作?
  • @Maarten 谢谢。它会派上用场的。但是,据我了解,序列化只是一种保存应用程序当前状态的工具,但在这种情况下,我仍然需要将一些变量,各种类型,分组在一个容器中。
  • @DStanley 想象我需要类中大量变量的值,这些变量我只知道定义名称的字符串,并且我不想要“服务代码”允许我将字符串关联到变量以出现在我的类的代码中。也许今天是我想太多了。明天最好再考虑一下。
  • @Andrea 所以你实际上是在将反射代码包装在一个静态类方法中?没关系,但我同意可能有更好的结构,例如 Dictionary,可以让事情变得更容易。

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


【解决方案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; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    相关资源
    最近更新 更多