C 反射實用

2021-09-24 10:38:07 字數 2357 閱讀 1570

在.net中的反射,常用的有三個方法:

assembly.load()

assembly.load(「程式集」)  //也就dll的命名空間

assembly.loadfrom()

assembly.loadfile()

動態載入ddl後開始操作,簡單的寫一下

public class class1 : iclass1

}

public inte***ce iclass1

assembly assembly = assembly.load("fstest");

iclass1 aa = (iclass1)assembly.createinstance("class1");

int res = aa.sum(11, 22);

//1、獲取指定路徑的程式集物件

assembly assembly = assembly.loadfile(path.combine(environment.currentdirectory, "calculatortest.dll"));

//2、根據程式集物件和 型別名稱建立物件,並且可以傳遞構造引數,然後可以用 objany.gettype() 獲取 type

object jiafaobj = assembly.createobject("calculatortest.jiafaclass", 3, 4);

if (jiafaobj != null)

); new object );

#region 通過 屬性或字段方式 而不是 在建構函式中 傳值

2.2屬性方式賦值

//propertyinfo num1 = calculatortype.getproperty("number1");

//propertyinfo num2 = calculatortype.getproperty("number2");

//if (num1 != null && num2 != null)

//2.2欄位方式賦值

//fieldinfo num1 = calculatortype.getfield("number1");

//fieldinfo num2 = calculatortype.getfield("number1");

//if (num1 != null && num2 != null)

// #endregion

#endregion

//3、根據函式名稱建立方法元資料

methodinfo jisuanmethod = objtype.getmethod("jisuan");

if (jisuanmethod!=null)

);   //沒引數用new object {}或 null 有引數用 new object 這樣

console.writeline(jisuanreturn.tostring());

}}接下裡是個人覺得比較好用的部分

optimizereflection 這個類庫提供了一些擴充套件方法,它們用於優化常見的反射場景

// 對於屬性的讀寫操作、方法的呼叫操作,還提供了效能更好的強型別(泛型)版本 

//type instancetype = typeof(democlass);

//propertyinfo propertyinfo = instancetype.getproperty("id");

//fieldinfo fieldinfo = instancetype.getfield("name");

//methodinfo methodinfo = instancetype.getmethod("add");

1. 建立例項物件

//democlass obj = (democlass)activator.createinstance(instancetype);

2. 寫屬性

123);

123);

3. 讀屬性

//int a = (int)propertyinfo.getvalue(obj);

//int b = (int)propertyinfo.getvalue(obj);

4. 寫字段

"fish li");

5. 讀欄位

//string s = (string)fieldinfo.getvalue(obj);

6. 呼叫方法

//int c = (int)methodinfo.invoke(obj, new object );

//int d = (int)methodinfo.invoke(obj, new object );

寫到這裡,歡迎交流!

C 反射實用技術

反射提供了封裝程式集 模組和型別的物件 type 型別 可以使用反射動態建立型別的例項,將型別繫結到現有物件,或從現有物件獲取型別並呼叫其方法或訪問其字段和屬性。如果 中使用了屬性,可以利用反射對它們進行訪問。程式集包含模組,而模組包含型別,型別又包含成員。反射則提供了封裝程式集 模組和型別的物件。...

C 反射實用技術筆記

反射提供了封裝程式集 模組和型別的物件 type 型別 可以使用反射動態建立型別的例項,將型別繫結到現有物件,或從現有物件獲取型別並呼叫其方法或訪問其字段和屬性。如果 中使用了屬性,可以利用反射對它們進行訪問。程式集包含模組,而模組包含型別,型別又包含成員。反射則提供了封裝程式集 模組和型別的物件。...

C 反射實用技術筆記

反射提供了封裝程式集 模組和型別的物件 type 型別 可以使用反射動態建立型別的例項,將型別繫結到現有物件,或從現有物件獲取型別並呼叫其方法或訪問其字段和屬性。如果 中使用了屬性,可以利用反射對它們進行訪問。程式集包含模組,而模組包含型別,型別又包含成員。反射則提供了封裝程式集 模組和型別的物件。...