C 中訪問私有成員 反射

2022-03-02 15:18:30 字數 1415 閱讀 1876

首先我必須承認訪問乙個類的私有成員不是什麼好做法。大家也都知道私有成員在外部是不能被訪問的。而乙個類中會存在很多私有成員:如私有字段、私有屬性、私有方法。對於私有成員訪問,可以套用下面這種非常好的方式去解決。

private string name;public string name set }

但是有時候,源**是別人的,你就不能修改源**,只提供給你dll。或者你去維護別人的**,源**卻有丟失。這樣的情況如果你想知道私有成員的值,甚至去想直接呼叫類裡面的私有方法。那怎麼辦呢?其實在.net中訪問私有成員不是很難,這篇文章提供幾個簡單的方法讓你如願以償。

為了讓**用起來優雅,使用擴充套件方法去實現。

1、得到私有欄位的值:

public static t getprivatefield(this object instance, string fieldname)

bindingflags flag = bindingflags.instance | bindingflags.nonpublic;

type type = instance.gettype();

fieldinfo field = type.getfield(fieldname, flag);

return (t)field.getvalue(instance);

2、得到私有屬性的值:

public static t getprivateproperty(this object instance, string propertyname)

bindingflags flag = bindingflags.instance | bindingflags.nonpublic;

type type = instance.gettype();

propertyinfo field = type.getproperty(propertyname, flag);

return (t)field.getvalue(instance, null);

3、設定私有成員的值:

public static void setprivatefield(this object instance, string fieldname, object value) 

4、設定私有屬性的值:

public static void setprivateproperty(this object instance, string propertyname, object value) 

5、呼叫私有方法:

public static t callprivatemethod(this object instance, string name, params object param)

C 中訪問私有成員

首先我必須承認訪問乙個類的私有成員不是什麼好做法。大家也都知道私有成員在外部是不能被訪問的。而乙個類中會存在很多私有成員 如私有字段 私有屬性 私有方法。對於私有成員訪問,可以套用下面這種非常好的方式去解決。private string name public string name set 但是有...

C 中訪問私有成員

首先訪問乙個類的私有成員不是什麼好做法。大家都知道私有成員在外部是不能被訪問的。乙個類中會存在很多私有成員 如私有字段 私有屬性 私有方法。對於私有成員造訪,可以套用下面這種非常好的方式去解決。private string name public string name set 但是有時候,源 是別...

C 中訪問私有成員

首先我必須承認訪問乙個類的私有成員不是什麼好做法。大家也都知道私有成員在外部是不能被訪問的。而乙個類中會存在很多私有成員 如私有字段 私有屬性 私有方法。對於私有成員訪問,可以套用下面這種非常好的方式去解決。private string name public string name set 但是有...