首先訪問乙個類的私有成員不是什麼好做法。大家都知道私有成員在外部是不能被訪問的。乙個類中會存在很多私有成員:如私有字段、私有屬性、私有方法。對於私有成員造訪,可以套用下面這種非常好的方式去解決。
private string name;public string name set }但是有時候,源**是別人的,只提供給你dll。或者你去維護別人的**,源**卻有丟失。這樣的情況或許你想知道私有成員的值,甚至去想直接呼叫類裡面的私有方法。那怎麼辦呢?在.net中訪問私有成員不是很難,這篇文章提供幾個簡單的方法讓你如願以償。
為了讓**用起來優雅,使用擴充套件方法去實現。
1、得到私有欄位的值:
public static t getprivatefield(this object instance, string fieldname)2、得到私有屬性的值:
public static t getprivateproperty(this object instance, string propertyname)3、設定私有成員的值:public static void setprivatefield(this objectinstance, stringfieldname, objectvalue)
bindingflagsflag = bindingflags.instance | bindingflags.nonpublic;
typetype = instance.gettype();
fieldinfofield = type.getfield(fieldname, flag);
field.setvalue(instance, value);
4、設定私有屬性的值:
public static void setprivateproperty(this objectinstance, stringpropertyname, objectvalue)
bindingflagsflag = bindingflags.instance | bindingflags.nonpublic;
typetype = instance.gettype();
propertyinfofield = type.getproperty(propertyname, flag);
field.setvalue(instance, value, null);
5、呼叫私有方法:
public static t callprivatemethod(this object instance, string name, params object param)測試:下面我們使用乙個測試類,進行測試。新建乙個類庫專案,測試的類**如下:
public class將上面類庫的dll引入控制台專案中。使用下面**去使用這個類的私有成員:testclass
public testclass() private int privatefield1; private int privatefield2; private string privatefielda private string privatefieldb private int add() private string join() }
testclass obj = new結果如下:testclass();system.console.writeline("私有字段");system.console.writeline(obj.getprivatefield("privatefield1"));system.console.writeline(obj.getprivatefield("privatefield2"));system.console.writeline("私有屬性");system.console.writeline(obj.getprivateproperty("privatefielda"));system.console.writeline(obj.getprivateproperty("privatefieldb"));system.console.writeline("私有方法");system.console.writeline(obj.callprivatemethod("add",null));system.console.writeline(obj.callprivatemethod("join"
null));system.console.writeline("修改私有屬性");obj.setprivateproperty("privatefielda"
"hello");obj.setprivateproperty("privatefieldb"
"world");system.console.writeline(obj.callprivatemethod("join"
null));system.console.read();
總結:
C 中訪問私有成員
首先我必須承認訪問乙個類的私有成員不是什麼好做法。大家也都知道私有成員在外部是不能被訪問的。而乙個類中會存在很多私有成員 如私有字段 私有屬性 私有方法。對於私有成員訪問,可以套用下面這種非常好的方式去解決。private string name public string name set 但是有...
C 中訪問私有成員
首先我必須承認訪問乙個類的私有成員不是什麼好做法。大家也都知道私有成員在外部是不能被訪問的。而乙個類中會存在很多私有成員 如私有字段 私有屬性 私有方法。對於私有成員訪問,可以套用下面這種非常好的方式去解決。private string name public string name set 但是有...
詳解C 中訪問私有成員
首先我必須承認訪問乙個類的私有成員不是什麼好做法。大家也都知道私有成員在外部是不能被訪問的。而乙個類中會存在很多私有成員 如私有字段 私有屬性 私有方法。對於私有成員訪問,可以套用下面這種非常好的方式去解決。private string name public string name set 但是有...