2015-05-29 73 views
-1

我想访问某个类的私有成员,该构造函数的构造函数被定义为private。如何为这样的类创建PrivateObject以便我可以访问其私有成员?用c中的私有构造函数创建一个私有对象#

我尝试过这样的事情,但是我不能实例化类“MyClass1”,所以我不能即刻使用PrivateObject。

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

有没有解决方法?

+1

你可能不应该在所有这样做,但在关闭的机会,你有一个很好的理由,试图通过反射获取构造器: http://stackoverflow.com/a/3255716/424129 –

+1

您只能从类内部访问类的私有成员。如果您无法修改该类的源代码,则无法更改私有变量。 –

+1

@BenjaminHodgson PrivateObject是一种类型,它执行必要的反射工作来访问私有成员。见https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privateobject.aspx –

回答

0

具有私有构造函数的类只能从其自己的静态方法创建自己。例如:

class MyClass1 
{ 
    private MyClass1() 
    { 

    } 

    public static MyClass1 CreateInstance() 
    { 
     return new MyClass1(); 
    } 
} 

它的私有成员就像字段或属性始终可以访问只在类内(除非你做一些技巧与反射)。如果该字段受到保护,则可以通过从此类派生来访问它。所有其他方式都是通过设计来限制对这些字段的访问,而不应该尝试从外部访问它们。

编辑︰现在我注意到你使用PrivateObject类创建反射骗局上面提到的。所以现在你只需要创建实例。您应该检查可能通过某种静态方法初始化此对象的设计方式是什么?

或查看此链接了解更多黑客有反光标识和使用激活:http://www.ipreferjim.com/2011/08/c-instantiating-an-object-with-a-private-constructor/

相关问题