**如下:
public class privateobject
} **如下:
privateobject privateobject = new privateobject("the private value");//例項化物件
field privatestringfield = privateobject.class.
getdeclaredfield("privatestring");
privatestringfield.setaccessible(true);//允許訪問私有字段
string fieldvalue = (string) privatestringfield.get(privateobject);//獲得私有字段值
system.out.println("fieldvalue = " + fieldvalue);
這個**會列印出文字"fieldvalue = the private value",而該值正好是物件privateobject的私有欄位privatestring的值。
注意到我們使用了方法privateobject.class.getdeclaredfield("privatestring")。正是這個呼叫這個方法返回了私有字段。這個方法僅僅根據指定的類返回字段,不會返回父類申明的字段。
另外仔細觀察加粗的語句。通過呼叫 field.setaccessible(true),你關掉了對於這個指定字段例項的訪問檢查,僅僅對反射有效。現在你能訪問它了,不管它是私有的,保護的或是預設的(default),即時呼叫者並不在該範圍中。你仍然不能通過常規方法訪問該欄位,因為編譯器不允許。
訪問私有方法
為了訪問乙個私有方法,你需要呼叫class.getdeclaredmethod(string name,class parametertypes)或者class.getdeclaredmethods()方法。方法class.getmethod(string name,class parametertypes)和class.getmethods()僅僅返回公有方法,所以它們不會起到作用。下面是乙個簡單的例子,該例子中有乙個擁有私有方法的類,類下面是通過反射機制訪問私有方法的**。
**如下:
public class privateobject
private string getprivatestring()
} **如下:
privateobject privateobject = new privateobject("the private value");
method privatestringmethod = privateobject.class.
getdeclaredmethod("getprivatestring", null);
privatestringmethod.setaccessible(true);
string returnvalue = (string)
privatestringmethod.invoke(privateobject, null);
system.out.println("returnvalue = " + returnvalue);
fields[i].setaccessible(true);這句主要是因為私有的變數在物件外是無法訪問的,通過這個設定就可以改變私有變數的訪問權,還真的有點恐怖,當偶把這個解決方法告訴boss的時候,boss差點**,私有的都能訪問了,還有什麼安全可言?
不過了,有安全就有特權,所以由於能很好的解決問題還是被採納了
getdeclaredmethod()和getmethod()的區別
getdeclaredmethod*()獲取的是類自身宣告的所有方法,包含public、protected和private方法。
getmethod*()獲取的是類的所有共有方法,這就包括自身的所有public方法,和從基類繼承的、從介面實現的所有public方法。
c 反射訪問私有變數
反射是反射dll程式集中的資訊 用反射可以做幾件事,下面演示如何訪問private 比如這有乙個class library 叫ticketlibrary 裡面有乙個class叫ticketinfo ticketinfo.cs 裡面有乙個叫ticketlist的private static list ...
通過反射可以訪問私有變數 方法
今天學習rtti的時候,發現通過反射可以訪問私有方法 也可以改變私有變數的值,這樣來說的話private 是不是基本沒有意義了啊?public class user public string get 測試類如下 public class testmain 獲得所有屬性名字 field fields...
C 中訪問私有成員 反射
首先我必須承認訪問乙個類的私有成員不是什麼好做法。大家也都知道私有成員在外部是不能被訪問的。而乙個類中會存在很多私有成員 如私有字段 私有屬性 私有方法。對於私有成員訪問,可以套用下面這種非常好的方式去解決。private string name public string name set 但是有...