C# creating instance of class and set properties by name in string

后端 未结 3 847
不知归路
不知归路 2020-12-05 17:53

I have some problem. I want to creating instance of class by name. I found Activator.CreateInstance http://msdn.microsoft.com/en-us/library/d133hta4.aspx and it

相关标签:
3条回答
  • 2020-12-05 18:14

    If you had System.TypeLoad Exception, your class name is wrong.

    To method Type.GetType you must enter assembly-qualified name. That is with the project name For example: GenerateClassDynamically_ConsoleApp1.Foo

    If it is in another assembly jou must enter assembly name after comma (details on https://stackoverflow.com/a/3512351/1540350): Type.GetType("GenerateClassDynamically_ConsoleApp1.Foo,GenerateClassDynamically_ConsoleApp1");

    0 讨论(0)
  • 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);
    }
    
    0 讨论(0)
  • 2020-12-05 18:35

    You could use 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);
        }
    }
    
    0 讨论(0)
提交回复
热议问题