2012-11-02 15 views
5

Se si dispone di ObjectA e ha un metodo privato GetPrice() e ha anche un campo "padre" dello stesso tipo, perché sono in grado di chiamare GetPrice() nell'istanza padre dall'istanza figlio?Perché è possibile chiamare un metodo privato di un'altra istanza dello stesso tipo al di fuori di tale istanza?

Esempio:

private decimal GetPrice() 
{ 
    ObjectA parent = Parent; 

    if(parent != null) 
    { 
     return parent.GetPrice(); // Why is this OK? 
    } 

    return 0; 
} 
+1

perché i progettisti lingua pensato che dovrebbe funzionare in questo modo? –

risposta

12

Perché mezzi privati ​​"non accessibile ad altri tipi ", non "non accessibili ad altri istanze".

+2

Grazie ... Nei 5 anni in cui ho programmato C#, non l'ho mai notato. Immagino da quando ho appreso i modificatori di accesso di C#, l'ho scambiato come privato dell'istanza. Ora mi sento un pazzo. Ya impari qualcosa ogni giorno! – Thelonias

+0

@Ryan, so cosa intendi ... Immagino che questa sia una di quelle cose che puoi "fraintendere" a lungo. E in pratica si comporta proprio come penseresti, finché non provi * a * ad accedere al membro privato di un'altra istanza e renditi conto che è permesso :) – Astrotrain

6

Poiché private portata è limitata alla classe , non il esempio come definito nella C# spec:

1.6.2 Accessibilità Ogni membro di una classe ha un'accessibilità associato, che controlla le regioni del testo del programma che sono in grado di accedere al membro. Lì sono cinque possibili forme di accessibilità. Questi sono riepilogati nella seguente tabella .

 
Accessibility  Meaning 

public    Access not limited 
protected   Access limited to this class or classes derived from this class 
internal   Access limited to this program 
protected internal Access limited to this program or classes derived from this class  
private    Access limited to this class 
1

un modificatore di accesso è legato alla sua attuazione classe/tipo non istanze di tale classe

Problemi correlati