舉例:
存在乙個類:
public class student
student stu1 = new student(
);
現在,我們想通過反射在運python基礎教程行時給stu1的name 和 age欄位 賦值,讓name = 「小明」,age = 15,怎麼做?
簡單的**如下:
...略
using system.reflection;
//反射類..
.略static void main(string[
] args)
需要注意的是:fieldinfo的setvalue方法有可能會導致異常,比如 fieldinfo2.setvalue(stu1,「15」),這句話給乙個int型字段賦了string型別的值,編譯是不會報錯的,在執行時會丟擲乙個system.argumentexception異常,請多加注意.
有了以上的了解,讓我們寫乙個簡單的動態字段c#教程賦值/取值類dynamic
具體**如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.reflection;
namespace myunityhelper///
/// 泛型動態賦值
///<
/summary>///
"t">
<
/typeparam>///
"obj"
>
<
/param>///
"fieldname"
>
<
/param>///
"value"
>
<
/param>
public static void setvalue
(object obj, string fieldname, t value)///
/// 動態取值
///<
/summary>///
"obj"
>
<
/param>///
"fieldname"
>
<
/param>///
<
/returns>
public static object getvalue(
object obj, string fieldname)///
/// 動態取值泛型
///<
/summary>///
"t">
<
/typeparam>///
"obj"
>
<
/param>///
"fieldname"
>
<
/param>///
<
/returns>
public static t getvalue
(object obj,string fieldname)
}}
補充:c#利用反射方法實現物件的字段和屬性之間值傳遞
在物件導向開發過程中,往往會遇到兩個物件之間進行值傳遞的情況,如果物件中的屬性和字段較多,手動一一賦值效率實在太低。
這裡就整理了乙個通用的物件之間進行值傳遞的方法,並且考慮到物件中可能包含類屬性,因此還用到了遞迴以解決這個問題。
下面上**:
public static void convertobject(
object srcclass,
object desclass,
bool convertproperty = true,
bool convertfield = true,
bool showerror = true)
if(convertproperty)
else}}
}}}if
(convertfield)
else}}
}}}}
catch (exception ex)
, message=");
}else
, message=");
}}}
C 通過反射獲取列舉值列表
通過type.getfields bindingflags.static 獲取列舉值列表,然後通過fieldinfo.getvalue null 就能獲取到值,注意是傳入null,像獲取靜態值和常量那樣。返回的值可以直接強轉為int,因為列舉的基礎型別就是int。如果獲取所有的字段資訊,會發現裡面有...
c 如何通過反射 獲取 設定屬性值
c 利用反射,遍歷獲得乙個類的所有屬性名,以及該類的例項的所有屬性的值 命名空間 system.reflection 程式集 mscorlib 在 mscorlib.dll 中 c 利用反射,遍歷獲得乙個類的所有屬性名,以及該類的例項的所有屬性的值 總結 對應某個類的例項化的物件tc,遍歷獲取所有屬...
c 通過反射獲取類中的所有欄位和屬性
reflection中文翻譯為反射,是.net中獲取執行時型別資訊的方式。net的應用程式由幾個部分 程式集 assembly 模組 module 型別 class 組成。反射提供一種程式設計的方式,讓程式設計師可以在程式執行期獲得這幾個組成部分的相關資訊。assembly類可以獲得正在執行的裝配件...