C# 根據類名創建類的實例對象2


因為我使用這個方法的類都是和AbstractScenePageDTO處於一個命名空間以及程序集下的,所以獲取命名空間和程序集的時候,直接使用AbstractScenePageDTO這個類進行獲取,這樣更准確一些,也不怕項目遷移改名。

復制代碼
1         private T CreateActivityScenePageByKey<T>(string key) where T:AbstractScenePageDTO
2         {
3             //(基類)Assembly.Load("當前程序集名稱").CreateInstance("命名空間.子類名稱"));  
4             T x = (T)Assembly.Load(typeof(AbstractScenePageDTO).Assembly.GetName().Name)
5                 .CreateInstance((typeof(AbstractScenePageDTO).Namespace + "." + string.Format("{0}DTO", key)));
6             return x;
7         }
復制代碼

http://blog.csdn.net/jzaicn/article/details/21284043

獲取類型的寫法從這里看來的

 //反射機制  
    //參數  
    object[] parameters = new object[1];  
    parameters[0] = _rowDataFromCore;  
      
    //(基類)Assembly.Load("當前程序集名稱").CreateInstance("命名空間.子類名稱"));  
    type = (ATypeBase)Assembly.Load(typeof(ATypeBase).Assembly.GetName().Name)  
        .CreateInstance(typeof(ATypeBase).Namespace + "." + string.Format("A{0}", typeName)  
                        ,false,System.Reflection.BindingFlags.Default  
                        ,null,parameters,null,null);  
View Code

 

c# 當前程序集名稱 :typeof(ATypeBase).Assembly.GetName().Name

c# 命名空間:typeof(ATypeBase).Namespace

這兩個的獲取還挺有用的。

http://www.cnblogs.com/feiyuhuo/p/5793606.html

這個地址寫的挺詳細的

/// <summary>
    /// 反射幫助類
    /// </summary>
    public static class ReflectionHelper
    {
        /// <summary>
        /// 創建對象實例
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fullName">命名空間.類型名</param>
        /// <param name="assemblyName">程序集</param>
        /// <returns></returns>
        public static T CreateInstance<T>(string fullName, string assemblyName)
        {
            string path = fullName + "," + assemblyName;//命名空間.類型名,程序集
            Type o = Type.GetType(path);//加載類型
            object obj = Activator.CreateInstance(o, true);//根據類型創建實例
            return (T)obj;//類型轉換並返回
        }

        /// <summary>
        /// 創建對象實例
        /// </summary>
        /// <typeparam name="T">要創建對象的類型</typeparam>
        /// <param name="assemblyName">類型所在程序集名稱</param>
        /// <param name="nameSpace">類型所在命名空間</param>
        /// <param name="className">類型名</param>
        /// <returns></returns>
        public static T CreateInstance<T>(string assemblyName, string nameSpace, string className)
        {
            try
            {
                string fullName = nameSpace + "." + className;//命名空間.類型名
                //此為第一種寫法
                object ect = Assembly.Load(assemblyName).CreateInstance(fullName);//加載程序集,創建程序集里面的 命名空間.類型名 實例
                return (T)ect;//類型轉換並返回
                //下面是第二種寫法
                //string path = fullName + "," + assemblyName;//命名空間.類型名,程序集
                //Type o = Type.GetType(path);//加載類型
                //object obj = Activator.CreateInstance(o, true);//根據類型創建實例
                //return (T)obj;//類型轉換並返回
            }
            catch
            {
                //發生異常,返回類型的默認值
                return default(T);
            }
        }
    }
View Code

 


免責聲明!

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



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