我想訪問課堂中受保護的成員。有一個簡單的方法嗎?如何讀出受保護的成員
4
A
回答
9
有兩種方式:
- 創建一個子類,你要訪問其保護成員的類。
- 使用反射。
#1只有在您控制誰創建類的實例時纔有效。如果一個已經構建的實例正在交給你,那麼#2是唯一可行的解決方案。儘管如此,我個人認爲我已經用盡了所有其他可能的機制來實現你的功能。
0
如果您可以從具有該受保護成員的類派生而不是您可以訪問的類。
至於使用反射,this might help。
0
您是否爲會員選擇了正確的附件?
- protected (C# Reference);
- public (C# Reference);
- private (C# Reference);
- internal (C# Reference)。
- 您也可以結合內部與保護。
通過所有方式,保護訪問器指定只應在派生類中訪問成員。因此,如果您的目標是在派生類之外訪問它,或許您應該考慮使用public或internal accessor !?
此外,這是可行的Reflection (C# and Visual Basic)。
在另一方面,如果你真的想揭露一類的保護成員,我會嘗試使用公共成員和返回保護通過對它的引用。
但是,請問問自己,在曝光受保護的成員之前,您的設計是否良好。它看起來像我的設計氣味。
1
我有時需要做到這一點。當使用WinForms時,系統類中的值是您想要訪問的,但不能,因爲它們是私有的。爲了解決這個問題,我使用反射來訪問它們。例如...
// Example of a class with internal private field
public class ExampleClass
{
private int example;
}
private static FieldInfo _fiExample;
private int GrabExampleValue(ExampleClass instance)
{
// Only need to cache reflection info the first time needed
if (_fiExample == null)
{
// Cache field info about the internal 'example' private field
_fiExample = typeof(ExampleClass).GetField("example", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField);
}
// Grab the internal property
return (int)_fiExample.GetValue(instance);
}
相關問題
- 1. 如何訪問受保護的成員
- 2. 免費訪問受保護的成員
- 3. 受保護的成員可見用戶
- 4. 使用受保護的成員
- 5. 無法訪問受保護的成員
- 6. 訪問受保護的成員
- 7. 錯誤訪問受保護的成員
- 8. 無法訪問受保護的成員?
- 9. 訪問klarna API的受保護成員
- 10. 一類受保護成員的思考
- 11. 受保護成員的範圍
- 12. 密封類中的受保護成員
- 13. 訪問受保護的成員
- 14. 受保護的內部成員
- 15. 受保護的數據成員
- 16. 受保護成員的繼承
- 17. 如何讓班級成員受到保護並保持內部?
- 18. 使用繼承的受保護成員(C++)出現問題
- 19. 是否可以防止Doxygen輸出受保護的成員?
- 20. 如何用Rhino.Mocks模擬受保護的虛擬成員?
- 21. 如何訪問派生類中的受保護成員?
- 22. 如何在受保護的環境中實現接口成員?
- 23. 如何在FakeItEasy中模擬受保護的虛擬成員?
- 24. 私人和受保護成員如何在PHP OOP中運行?
- 25. 如何使保護成員的「孫子」
- 26. 自動完成列表中的PHPDoc/PhpStorm受保護成員
- 27. 如何防止保護成員
- 28. C++:允許訪問受保護的類的成員,而不是私人成員
- 29. 派生類不能使用成員指針受保護的基類成員
- 30. 從模板化(靜態)成員函數訪問受保護的成員
大部分時間裏,它的保護是有原因的...... – 2010-12-02 03:01:43