Zugriff auf Private Variablen in einer Kind-Klasse?
So, ich war surfen einige code, und ich stieß auf:
public class Person
{
private string message;
public override string ToString()
{
return message;
}
public static Person CreateEmployee()
{
return new Employee();
}
class Employee : Person
{
public Employee()
{
this.message = "I inherit private members!";
}
}
}
Kann mir bitte jemand erklären, wie die private variable "message" wird nicht verwendet/aufgerufen, obwohl seine private??
- stackoverflow.com/questions/1083032/...
- Das ist ein Feld. Und es ist C#, nicht C++.
- ja ich weiß, aber ich musste 2 tags hinzufügen
- msdn.microsoft.com/en-us/library/ms182162.aspx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Private Mitglieder sind für alle zugänglich-code innerhalb der Klasse, einschließlich geschachtelter Klassen.
Wenn Sie bewegen Sie den
Employee
Klasse außerhalb derPerson
Klasse, es wird fehlschlagen, bis Sie das Feldprotected
.Die einfache Tatsache ist, das funktioniert, weil Compiler ermöglichen es der Designer dachte, es war eine gute Sache. Sobald der code kompiliert wird, private/öffentliche Variablen werden im Speicher gespeichert, in genau der gleichen Weise. (Die CLR ist einfach sich der unterschiedlichen Metadaten-Attribute für Sie.)
Den Begründung ist: verschachtelte Klassen und Ihre Mitglieder werden immer noch als zu Lügen konzeptionell/hierarchisch innerhalb der übergeordneten Klasse. Daher werden private member der Basisklasse sind immer zugänglich, durch diese Semantik. Außerdem, es macht das Leben einfacher für Programmierer in vielen Fällen, ohne die objektorientierte Kapselung der Regel!
In der Tat, wenn Sie wollen, zu denken über diese in Bezug auf code, beliebigen code, dass fällt in die öffnen und schließen Klammern einer Klasse zugreifen können Ihre privaten Mitglieder, unabhängig davon, ob es liegt unmittelbar in eine geschachtelte Klasse/Struktur/etc.
Weil
Employee
ist eine innere Klasse von Person.Siehe diese Frage: können-inner-Klassen-Zugriff auf private-Variablen
Private Mitarbeiter-und privaten Nachrichten sind Geschwister, Mitarbeiter können die Nachricht. Wenn Sie reservieren Private Nachricht in eine andere Klasse und markieren Sie es als protected/private außerhalb der Klasse Person, dann der Mitarbeiter nicht in der Lage sein zu sehen oder nutzen es nicht mehr, auch mit einer Instanz der Klasse.