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

Я 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 overridingprotected' унаследованный член `A.foo ()'

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

8
задан Jack 5 May 2012 в 01:53
поделиться