2010-08-20 119 views

回答

5

它不能。这是私人access modifier的全部目的:

的类型或成员只能通过代码在同一类或 结构进行访问 。

当然,你总是可以使用反射。

+0

+1私人领域。如果您能够更改基类,则这是受保护的访问修饰符对于 – fletcher 2010-08-20 08:27:39

10

或者:

  1. 抬高从private其访问protected
  2. 或,添加另一个保护部件访问它,并且从派生的类
  3. 或,使用反射
  4. 使用该代替或者更改代码,以便您不需要访问它

4,我如果是私人财产或方法,则选择1;如果是私人领域,则选择2。我会在该字段周围添加受保护的属性。

2

它不能。如果您希望方法可以被派生类访问,那么您需要改为使用protected

4

此答案只是为了完整。在几乎所有情况下,请使用其他答案中的建议。

其他的答案是正确的,但有一个情况,即派生类可以访问基类的私有成员:当派生类是嵌套类的基类。这实际上可以成为模仿C#中的Java枚举的有用功能。示例代码(不是J​​ava的枚举,只是“访问私有成员”位。)

public class Parent 
{ 
    private void PrivateMethod() 
    { 
    } 

    class Child : Parent 
    { 
     public void Foo() 
     { 
      PrivateMethod(); 
     } 
    } 
} 
+0

不起作用。 – Swathi 2010-08-20 11:01:52

+0

@Swathi:那么我发布的代码编译没有问题,所以我不知道问题是什么。请提供更多细节。 (“它不工作”几乎从来没有一个有用的东西自己说。*明显的*后续问题是“以什么方式不起作用?”) – 2010-08-20 11:04:32

3

与反思:

FieldInfo f = typeof(Foo).GetField("someField", BindingFlags.Instance | BindingFlags.NonPublic); 
fd.SetValue(obj, "New value"); 
+0

k,我得到了...谢谢你! – Swathi 2010-08-20 10:56:30

相关问题