C#反射通過類名的字符串獲取生成對應的實例


在.net core 1.1環境下

今天項目中遇到這個問題了,稍微查了一下並沒有現成的樣例。自己實現了。

1        static void Main(string[] args)
2         {
3             TestGetAssembly();
4         }
        static void TestGetAssembly()
        {
            AssemblyName name=new AssemblyName("Reflect");//我的程序集的名稱為"Reflect"
            var result = Assembly.Load(name);       
            Console.WriteLine(result.FullName);
            TestGetIntance(result);
        }

        static void TestGetIntance(Assembly assembly)
        {
            Users user= (Users)assembly.CreateInstance("Reflect.Users");//這里要寫的格式為“命名空間.類名稱”,切記!
            user.ID = 1;
            Console.WriteLine(user.ID);
        }

更新:

發現了一種更簡單的方法(構造函數無參數的情況)

        public T GetInstance<T>(string instanceName)
        {
            
            return (T)Assembly.Load(Assembly.GetAssembly(typeof(T)).GetName().Name).CreateInstance(typeof(T).Namespace+"."+instanceName);

        }

 構造函數有參的情況(參數param 表示要傳遞給生成實例構造函數的參數)

        public static T GetInstance<T>(string instanceName,params object[] param)
        {           
            return (T)Assembly.Load(Assembly.GetAssembly(typeof(T)).GetName().Name).CreateInstance(typeof(T).Namespace+"."+instanceName,true,BindingFlags.CreateInstance,null, param,Thread.CurrentThread.CurrentCulture,null);
        }
    

 

查看程序集的名稱方法為右鍵項目,點擊屬性就可以查看到程序集名稱,和命名空間了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM