Sono un programmatore C++ che inizia con D e ho difficoltà a comprendere i qualificatori di accesso per le classi D. Si consideri il seguente esempio:Qualificatori di accesso pubblici, privati e protetti per le classi D
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
}
mi aspetterei che il precedente codice di fallire la compilazione, dal momento che sta chiamando i metodi privati e protetti della classe Foo
in una funzione esterna. Tuttavia, questo non è il caso, poiché l'esempio sopra compila ed esegue senza errori o avvisi su DMD v2.063.2. Chiaramente le parole chiave hanno un significato diverso da quelle del C++.
Le mie domande sono:
1) Come fare un metodo e/o variabile privata a una classe in modo che solo la classe in questione può accedervi.
2) Come rendere protetto un metodo e/o una variabile, in modo che solo la classe in questione e le sue classi derivate possano accedervi.
vedere http://stackoverflow.com/questions/8393372/where-can-i-read-more-about-ds-class-access-modifiers/8393430#8393430 –