Sono programmatore C# nuovo nel linguaggio D. Sono un po 'confuso con OOP in linguaggio di programmazione D.Perché una funzione con modificatore protetto può essere ignorata e accessibile ovunque?
Supponendo che ho la seguente classe:
public class A {
protected void foo() {
writefln("A.foo() called.");
}
};
public class B : A {
public override void foo() {
writefln("B.foo() called.");
}
};
Il protected
modificatore significa che posso accedere al metodo .foo()
proprio sulla classe ereditata, quindi perché questo programma D compila normalmente?
Ecco l'equivalente di C# .NET:
using System;
public class A {
protected virtual void foo() {
Console.WriteLine("a.foo() called.");
}
};
public class B : A {
public override void foo() {
Console.WriteLine("b.foo() called.");
}
};
public class MainClass {
public static void Main(string[] args) {
A a = new A();
B b = new B();
a.foo();
b.foo();
}
};
E non si compila e dato il seguente messaggio di errore (come mi aspettavo):
Test.cs (10 , 30): l'errore CS0507:
B.foo()': cannot change access modifiers when overriding
protetta 'ereditato membro `A.foo()'
qualcuno può spiegare questo comportamento D? Grazie in anticipo.
Perché sei confuso? C# e D sono solo lingue diverse, quindi fanno le cose in modo diverso. A prima vista, entrambi gli approcci hanno un senso per me, quindi spetta ai progettisti di linguaggio decidere quale strada seguire. – svick
Humm, perché avevo in mente che i modificatori di accesso di un linguaggio di programmazione orientato agli oggetti funzionavano allo stesso modo. – Jack
downvotes- può spiegare per favore? – Jack