在軟件開發尤其是框架和底層開發時
一
可以使用反射動態地創建類型的實例
需要使用的命名空間
反射的作用很多
例子類
class ReflTest
{
private string _prop
public string Prop
{
get { return _prop
set { _prop
}
public void Write
{
Console
}
public void Write
{
Console
}
public void MyWrite(string strText)
{
Console
}
}
這個例子中提供了三個方法和一個屬性
string strText = \
BindingFlags flags = (BindingFlags
BindingFlags
Type t = typeof(ReflTest
MethodInfo[] mi = t
Object obj = Activator
foreach (MethodInfo m in mi)
{
if (m
{
m
} [Page]
}
MethodInfo mMy = t
if (mMy != null)
{
mMy
}
BindingFlags用來設置要取得哪些類型的方法
二
我們可以在程序運行過程中調用
需要使用的命名空間
動態創建
public static Assembly NewAssembly()
{
//創建編譯器實例
provider = new CSharpCodeProvider();
//設置編譯參數
paras = new CompilerParameters();
paras
paras
//創建動態代碼
StringBuilder classSource = new StringBuilder();
classSource
classSource
//創建屬性
classSource
classSource
classSource
classSource
System
//編譯代碼
CompilerResults result = provider
//獲取編譯後的程序集
Assembly assembly = result
return assembly;
}
private static string propertyString(string propertyName)
{
StringBuilder sbProperty = new StringBuilder();
sbProperty
sbProperty
sbProperty
sbProperty
sbProperty
sbProperty
return sbProperty
}propertyString方法就是用來拼寫字符串的
整個代碼比較簡單
接下來就可以利用之前反射的方法來動態調用這個類中的屬性了
Assembly assembly = NewAssembly();
object Class
ReflectionSetProperty(Class
ReflectionGetProperty(Class
object Class
ReflectionSetProperty(Class
ReflectionGetProperty(Class
DynamicClass是我動態類的類名
ReflectionSetProperty和ReflectionGetProperty代碼如下
給屬性賦值
private static void ReflectionSetProperty(object objClass
{
PropertyInfo[] infos = objClass
foreach (PropertyInfo info in infos)
{
if (info
{
info
}
}
}
取得屬性的值
private static void ReflectionGetProperty(object objClass
{
PropertyInfo[] infos = objClass
foreach (PropertyInfo info in infos)
{
if (info
{
System
}
}
}
From:http://tw.wingwit.com/Article/program/net/201311/13126.html