我如何使用一个我只知道名字的对象?

时间:2015-07-15 14:25:15

标签: c# class variables object

我正在研究一个项目,它将利用某种对象(在这种情况下我们称之为“机器”。这种类型的对象有参数,方法等。我希望使用它的方法。

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

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

2 个答案:

答案 0 :(得分:0)

使用dynamic

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

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

答案 1 :(得分:0)

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

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