2015-07-15 4 views
1

В настоящий момент я работаю над проектом, который будет использовать определенный тип объекта (который мы будем называть «Машина» в этом случае. Этот тип объекта имеет параметры, методы и т. Д., И я хочу используйте его методы.Как использовать объект Я знаю только имя?

В этом специальном случае у меня будет текстовое поле, которое позволяет пользователю изменять определенное свойство объекта моего собственного класса, позволяет просто называть его «Имя». Это свойство «Имя» может измените, введя имя в текстовое поле, доступное пользователю. Проверка этого текстового поля вызовет метод из «Машина» для определенного объекта этого класса, который может быть выбран из ComboBox где-то еще на этой странице.
Поскольку эти объекты создаются динамически, я не знаю, сколько из этих объектов есть и как они вызываются в частности ar, я знаю только, что они существуют.

Как бы вы подошли к такой ситуации? Есть ли способ, по которому вы можете в основном сказать «относиться к нему как к XY и использовать его методы, как если бы вы были уверены, что он имеет определенный тип»? (Как литье?) Или вы бы решили эту проблему другими способами?

+2

Использование отражения – tomsv

+1

вы имеете дело с анонимными объектами и нужно выяснить, что это такое? или вы знаете, какой тип объекта он есть? – user1666620

+0

@tomsv: Извините, я никогда раньше не использовал это, что это? – Jan

ответ

0

Использование dynamic.

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

Тем не менее, если вы можете заставить эти объекты реализовать интерфейс со свойствами, вы заботитесь о вашем коде будет быстрее и безопаснее.

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

+0

Это выглядит довольно близко к тому, о чем я думал , Можно ли использовать такой словарь, чтобы использовать конструктор для этого класса, который я написал? В основном, говоря, что у меня есть словарь, есть ключ с одной стороны и объект класса с другой и «строят» этот объект с помощью обычного конструктора? – Jan

Смежные вопросы