【问题标题】:How do I use an object I only know the name of?如何使用我只知道名称的对象?
【发布时间】:2015-10-04 15:45:14
【问题描述】:

我目前正在做一个项目,该项目将使用某种对象(在这种情况下,我们将其称为“机器”。这种类型的对象具有参数、方法等。pp。我想要使用它的方法。

在这种特殊情况下,我将有一个文本字段,允许用户更改我自己的类的对象的某个属性,为简单起见,我们将其称为“名称”。可以通过在用户可用的文本字段中键入名称来更改此属性“名称”。验证此文本字段将为该类的某个对象调用“机器”中的一个方法,该对象可以从该页面上其他位置的 ComboBox 中选择。
由于这些对象是动态创建的,我不知道这些对象有多少以及它们是如何被调用的,我只知道它们存在。

你会如何处理这种情况?有什么方法可以基本上说“将其视为 XY 并使用其方法,就好像您确定它是某种类型一样”? (像演员?) 或者你会用其他方式解决这个问题吗?

【问题讨论】:

  • 您是否在处理匿名对象并需要弄清楚它是什么?或者你知道它是什么类型的物体吗?
  • @tomsv :对不起,我以前没用过,它是什么?
  • 您能否提供有关您要解决的问题类型的更多信息?可能有一种不同的方式来做您正在寻找的事情,而无需尝试在运行时使用反射操作对象。
  • 这听起来你可以使用一个接口来定义类的对象保证具有的属性和方法。
  • @user1666620:我想使用该对象的一个​​方法(例如一个简单的集合)(让我们将其命名为“XYZ”),它可以让我(例如)设置对象 XYZ 为用户给定的值。基本上是 XYZ.setName = "Userinput" 但它们的 "XYZ" 部分只能作为在某处的 ComboBox 中选择的字符串使用。

标签: c# class variables object


【解决方案1】:

使用dynamic

dynamic d = machine as dynamic;
d.Name = userInput;

也就是说,如果您可以强制这些对象实现具有您关心的属性的接口,您的代码将会更快、更安全。

【讨论】:

    【解决方案2】:

    您可以从使用字典集合中受益:

    class MyClass
    {
        public string Prop1 { get; private set; }
        public int Prop2 { get; private set; }
        public double Prop3 { get; private set; }
    
        public Dictionary<string, Action<object>> Updater { get; private set; }
    
        public MyClass()
        {
            Updater = new Dictionary<string, Action<object>>()
            {
                {"Prop1", o => Prop1 = o as string},
                {"Prop2", o => Prop2 = (int)o},
                {"Prop3", o => Prop3 = (double)o},
            };
    
        }
    }
    
    class Class27
    {
        static void Main()
        {
            Dictionary<string, MyClass> instances = new Dictionary<string, MyClass>();
            instances.Add("First", new MyClass());
    
            instances["First"].Updater["Prop1"]("hello");
            instances["First"].Updater["Prop2"](10);
    
            Console.WriteLine(instances["First"].Prop1);
            Console.WriteLine(instances["First"].Prop2);
        }
    }
    

    输出:你好,10

    【讨论】:

    • 这看起来非常接近我的想法。是否可以使用这样的字典来为我编写的那个类使用构造函数?基本上,假设我有一本字典,一侧有一个 Key,另一侧有一个类的对象,然后使用常规构造函数“构建”该对象?
    猜你喜欢
    • 2012-01-06
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2021-08-25
    相关资源
    最近更新 更多