2012-11-02 4 views
5

Wenn ich ObjectA, und es hat eine private Methode GetPrice() und hat auch ein "Eltern" -Feld des gleichen Typs, warum kann ich GetPrice() auf der übergeordneten Instanz aus der untergeordneten Instanz aufrufen?Warum kann ich eine private Methode einer anderen Instanz desselben Typs außerhalb dieser Instanz aufrufen?

Beispiel:

private decimal GetPrice() 
{ 
    ObjectA parent = Parent; 

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

    return 0; 
} 
+1

Weil der Sprachdesigner gedacht, es sollte auch so funktionieren? –

Antwort

12

Da private Mittel "nicht zugänglich anderen Typen", nicht "nicht zugänglich anderen Instanzen".

+2

Danke ... In den 5 Jahren, in denen ich C# programmiert habe, habe ich das nie bemerkt. Ich glaube, seit ich C# 's Zugangsmodifikatoren gelernt habe, habe ich es als privat für die Instanz gehalten. Jetzt fühle ich mich wie ein Idiot. Du lernst jeden Tag etwas! – Thelonias

+0

@Ryan, ich weiß, was du meinst ... Ich denke, das ist eines dieser Dinge, die du lange "missverstehen" kannst. Und im Grunde verhält es sich so, wie du denkst, bis du tatsächlich * versuchst * auf das private Mitglied einer anderen Instanz zuzugreifen und zu erkennen, dass es erlaubt ist :) – Astrotrain

6

Da private Bereich auf die Klasse beschränkt ist, nicht die Instanz wie im C# spec definiert:

1.6.2 Zugänglichkeits Jedes Mitglied einer Klasse hat eine zugeordnete Zugänglichkeit, die steuert die Bereiche des Programmtexts, die auf das Mitglied zugreifen können. Dort sind fünf mögliche Formen der Zugänglichkeit. Diese sind in der folgenden Tabelle zusammengefasst: .

 
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

Zugriffsmodifikator ist damit verbundene Klasse Umsetzung/gibt nicht zu Instanzen dieser Klasse