Почему функция с модификатором protected может быть переопределена и доступна где угодно?C#

Место общения программистов C#
Ответить
Anonymous
 Почему функция с модификатором protected может быть переопределена и доступна где угодно?

Сообщение Anonymous »

Я программист 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()': невозможно изменить модификаторы доступа при переопределении protected' унаследованного члена `A.foo()'

Может кто-нибудь объяснить такое поведение D?

Подробнее здесь: https://stackoverflow.com/questions/104 ... e-every-wh
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»