我想访问一个类的私有成员,它的构造函数定义为private。如何为此类创建PrivateObject以便我可以访问其私有成员?
我试过类似这样的东西,但是我无法实例化“MyClass1”类,所以我无法立即使用PrivateObject。
MyClass1 myClass = new MyClass1(); //gives compilation error
PrivateObject po = new PrivateObject(myClass); //gives compilation error
有没有解决方法呢?
答案 0 :(得分:0)
具有私有构造函数的类只能从自己的静态方法创建自己。例如:
class MyClass1
{
private MyClass1()
{
}
public static MyClass1 CreateInstance()
{
return new MyClass1();
}
}
像字段或属性这样的私有成员总是只能从类内部访问(除非你用反射制作一些技巧)。如果该字段受到保护,您可以通过派生此类来访问它。所有其他方式都是为了限制对这些字段的访问而设计的,你不应该尝试从外部访问它们。
编辑:现在我注意到你使用了PrivateObject类,它被创建用于制作上面提到的反射技巧。所以现在你只需要创建实例。你应该检查一下静态方法初始化这个对象的设计方法是什么?
或者查看此链接以了解更多带有反射和使用Activator的黑客攻击:http://www.ipreferjim.com/2011/08/c-instantiating-an-object-with-a-private-constructor/