2010-08-20 189 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

相關問題