How do I create an instance from a string in C#?

前端 未结 2 2004
既然无缘
既然无缘 2020-11-28 12:56

I\'m reading information from an XML which contains the type of an object that I need to instantiate along with it\'s constructor parameters.

The object type is actu

相关标签:
2条回答
  • 2020-11-28 13:27

    If you want to create a type dynamically at run time, Activator.CreateInstance Method will do it for you. If you issue is with the type having a constructor with parameters, this overload will do this. For example, http://msdn.microsoft.com/en-us/library/wcxyzt4d.aspx

    I advise looking through the overloads for the best match.

    The namespace issue should be not be relavant - as long as the dll is in the bin directory or the GAC you should be OK. The rules may change if the assembly is Strongly named though.

    Could you provide a code snippiet of the code that is not working (using the method you linked to)? This + the errors you are seeing will be very helpful! [update] Quick sample using the Activator.CreateInstance that handles Constructors w/ paramaters.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                BaseProduct b =(BaseProduct)System.Activator.CreateInstance(Type.GetType("ConsoleApplication1.Product")
                    ,new object[]{typeof(string)}, 
                    new object[]{"123"}
                );
                //Activator..::.CreateInstance Method (Type, array<Object>[]()[], array<Object>[]()[])
            }
        }
        public class Product: BaseProduct{
            public  Product(string id) { 
    
            }
            public string Id {get;set;}
    
    
       }
    
        public abstract class BaseProduct {
            abstract public string Id { get; set; }
        }
    }
    
    0 讨论(0)
  • 2020-11-28 13:29
    • You need to specify the full type name to Type.GetType(), including namespace, e.g. "Company.Project2.Type"
    • If the type isn't in the same assembly (or mscorlib), you need to give the assembly name too, including version information if it's strongly typed. For example, for a non-strongly typed assembly Company.Project2.dll, you might specify "Company.Project2.Type, Company.Project2".
    • To call a constructor with parameters you can call Activator.CreateInstance(Type, Object[]) or get the exact constructor you want with Type.GetConstructor() and then call ConstructorInfo.Invoke().

    If that doesn't help, please give more information.

    0 讨论(0)
提交回复
热议问题