使用c#中的私有构造函数为类创建私有对象

时间:2015-05-29 17:12:09

标签: c#

我想访问一个类的私有成员,它的构造函数定义为private。如何为此类创建PrivateObject以便我可以访问其私有成员?

我试过类似这样的东西,但是我无法实例化“MyClass1”类,所以我无法立即使用PrivateObject。

    MyClass1 myClass = new MyClass1(); //gives compilation error
    PrivateObject po = new PrivateObject(myClass); //gives compilation error

有没有解决方法呢?

1 个答案:

答案 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/

相关问题