Ich bin ein C++ - Programmierer, der mit D beginnt, und ich habe Probleme, die Zugriffsqualifizierer für D-Klassen zu verstehen. Betrachten Sie das folgende Beispiel:Öffentliche, private und geschützte Zugriffsqualifizierer für D-Klassen
import std.stdio;
class Foo {
private void aPrivateMethod()
{
writeln("called aPrivateMethod");
}
protected void aProtectedMethod()
{
writeln("called aProtectedMethod");
}
public void aPublicMethod()
{
this.aPrivateMethod();
this.aProtectedMethod();
}
}
void main(string[] args)
{
Foo foo = new Foo();
foo.aPublicMethod(); // OK to call it from anywhere
foo.aPrivateMethod(); // Must not be allowed to call it outside Foo
foo.aProtectedMethod(); // Should only be callable from within Foo and derived classes
}
Ich würde der vorherige Code erwartet Kompilation zum Scheitern verurteilt, da es private und geschützten Methoden der Klasse ruft Foo
in einer externen Funktion. Dies ist jedoch nicht der Fall, da das obige Beispiel kompiliert und ohne Fehler oder Warnungen auf DMD v2.063.2 ausgeführt wird. Offensichtlich haben die Schlüsselwörter eine andere Bedeutung als C++.
Meine Fragen sind:
1) Wie ein Verfahren und/oder variable privat zu einer Klasse machen, so dass nur die betreffenden Klasse darauf zugreifen kann.
2) Wie man eine Methode und/oder eine Variable schützt, so dass nur die betreffende Klasse und ihre abgeleiteten Klassen darauf zugreifen können.
siehe http://stackoverflow.com/questions/8393372/where-can-i-read-more-about-ds-class-access-modifiers/8393430#8393430 –