天天看點

C#反射建立對象執行個體

反射

反射:使用反射動态地建立類型的執行個體,将類型綁定到現有對象,或從現有對象中擷取類型。然後,可以調用類型的方法或通路其字段和屬性。
  反射有個最常用的用法:一般用戶端軟體都會有更新功能,這個就是通過反射取到目前版本資訊,再和伺服器上最新的版本資訊比較,如果用戶端已經不是最新版本,那麼就會提示你更新。
  反射還可以通過指定程式集、命名空間和類名動态建立類的執行個體。
  通過下面一段代碼來了解反射建立對象的使用
           

代碼

using System;
using System.Reflection;

namespace Dxy.ReflectionTest
{
    /// <summary>
    /// 反射幫助類
    /// </summary>
    public static class ReflectionHelper
    {
        /// <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);
            }
        }
    }
}
           

調用方需要知道要建立執行個體的類所在程式集、命名空間和類名,如下

代碼

using System;

namespace Dxy.ReflectionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            ITest test = ReflectionHelper.CreateInstance<ITest>("ReflectionTest", "Dxy.ReflectionTest", "Test");
            Console.WriteLine(test.Name);
            Console.ReadLine();
        }
    }
}
           

版權聲明:本文為CSDN部落客「weixin_34336292」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_34336292/article/details/91932276