Я программист C#, новый для языка D. Я немного запутался с ООП на языке программирования D.Почему функция с защищенным модификатором может быть переопределена и доступна где угодно?
Если предположить, что у меня есть следующий класс:
public class A {
protected void foo() {
writefln("A.foo() called.");
}
};
public class B : A {
public override void foo() {
writefln("B.foo() called.");
}
};
protected
модификатора означает, что я могу получить доступ к методу .foo()
только на унаследованном классе, так почему это D программы компилируется нормально?
Вот эквивалент 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();
}
};
Это не компилирует и учитывая следующее сообщение об ошибке (как я ожидал):
test.cs (10 , 30): ошибка CS0507:
B.foo()': cannot change access modifiers when overriding
защищен 'наследуется членом `A.foo()'
Может кто-нибудь объяснить это поведение D? Заранее спасибо.
Почему вы смущены? C# и D - это просто разные языки, поэтому они делают что-то по-другому. На первый взгляд, оба подхода имеют для меня какой-то смысл, поэтому разработчикам языка решать, в какую сторону идти. – svick
Humm, потому что я имел в виду, что модификаторы доступа объектно-ориентированного языка программирования работают одинаково. – Jack
downvotes- можете объяснить пожалуйста? – Jack