在 class 之外可见的私有成员
Private members visible outside the class
为什么当断点在 class 之外时,我可以在快速观察 window 中看到我的 class 的私有成员?
我的断点在ConsoleApplication.cpp
我的 class 定义在 XmlSignature.h
我可以看到这些私有成员:Transforms_Root_element、xmlDocument
这是我的 class:
ref class XmlReference
{
public:
XmlReference(String^ URI);
virtual ~XmlReference();
String^ URI;
XmlElement^ Reference_element;
String^ ns_ds = "http://www.w3.org/2000/09/xmldsig#";
XmlNode^ AddTransform(String^ strAlgorithm);
XmlNode^ AddTransform(String^ strAlgorithm, String^ strParameterName, String^ strParameter);
List<XmlNode^>^ Transforms = gcnew List<XmlNode^>;
private:
XmlNode^ Transforms_Root_element = nullptr;
XmlDocument^ xmlDocument;
//Called by AddTransform
XmlNode^ CreateTransformElement(String^ strAlgorithm);
};
这是我能看到的:
这是一项功能,有助于调试 :-)。
Class 编译器确保成员可见性以强制执行面向对象的编程。正如@Medinoc 观察到的那样,.net 运行时还保护 class 的私有和受保护内存不被其他上下文访问。
在任何情况下,调试器都可以完全访问内存并可以显示所有成员内容。
为什么当断点在 class 之外时,我可以在快速观察 window 中看到我的 class 的私有成员?
我的断点在ConsoleApplication.cpp 我的 class 定义在 XmlSignature.h
我可以看到这些私有成员:Transforms_Root_element、xmlDocument
这是我的 class:
ref class XmlReference
{
public:
XmlReference(String^ URI);
virtual ~XmlReference();
String^ URI;
XmlElement^ Reference_element;
String^ ns_ds = "http://www.w3.org/2000/09/xmldsig#";
XmlNode^ AddTransform(String^ strAlgorithm);
XmlNode^ AddTransform(String^ strAlgorithm, String^ strParameterName, String^ strParameter);
List<XmlNode^>^ Transforms = gcnew List<XmlNode^>;
private:
XmlNode^ Transforms_Root_element = nullptr;
XmlDocument^ xmlDocument;
//Called by AddTransform
XmlNode^ CreateTransformElement(String^ strAlgorithm);
};
这是我能看到的:
这是一项功能,有助于调试 :-)。 Class 编译器确保成员可见性以强制执行面向对象的编程。正如@Medinoc 观察到的那样,.net 运行时还保护 class 的私有和受保护内存不被其他上下文访问。
在任何情况下,调试器都可以完全访问内存并可以显示所有成员内容。