С# создание экземпляра класса и установка свойств по имени в строке - программирование

С# создание экземпляра класса и установка свойств по имени в строке

У меня есть некоторые проблемы. Я хочу создать экземпляр класса по имени. Я нашел Activator.CreateInstance http://msdn.microsoft.com/en-us/library/d133hta4.aspx, и он отлично работает, и я нашел это: Установка свойства путем отражения со строковым значением тоже.

Но как это сделать? Я имею в виду, я знаю имя класса, я знаю все свойства этого класса, и у меня есть это в строке. Например:

string name = "MyClass";
string property = "PropertyInMyClass";

Как создать экземпляр и установить значение для свойств?

4b9b3361

Ответ 1

Вы можете использовать Reflection:

using System;
using System.Reflection;

public class Foo
{
    public string Bar { get; set; }
}

public class Program
{
    static void Main()
    {
        string name = "Foo";
        string property = "Bar";
        string value = "Baz";

        // Get the type contained in the name string
        Type type = Type.GetType(name, true);

        // create an instance of that type
        object instance = Activator.CreateInstance(type);

        // Get a property on the type that is stored in the 
        // property string
        PropertyInfo prop = type.GetProperty(property);

        // Set the value of the given property on the given instance
        prop.SetValue(instance, value, null);

        // at this stage instance.Bar will equal to the value
        Console.WriteLine(((Foo)instance).Bar);
    }
}

Ответ 2

Если у вас есть System.TypeLoad Exception, ваше имя класса неверно.

В метод Type.GetType вы должны ввести имя, присвоенное сборке. То есть с именем проекта Например: GenerateClassDynamically_ConsoleApp1.Foo

Если он находится в другой сборке, jou должен ввести имя сборки после запятой (подробности в fooobar.com/questions/37536/...): Type.GetType( "GenerateClassDynamically_ConsoleApp1.Foo, GenerateClassDynamically_ConsoleApp1" );

Ответ 3

Type tp = Type.GetType(Namespace.class + "," + n.Attributes["ProductName"].Value + ",Version=" + n.Attributes["ProductVersion"].Value + ", Culture=neutral, PublicKeyToken=null");
if (tp != null)
{
    object o = Activator.CreateInstance(tp);
    Control x = (Control)o;
    panel1.Controls.Add(x);
}