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