Запечатанная путаница с ключевыми словами - PullRequest
0 голосов
/ 31 октября 2010
using System;

class A
{
   public virtual void F() {
      Console.WriteLine("A.F");
   }
   public virtual void G() {
      Console.WriteLine("A.G");
   }
}

class B: A
{
   sealed override public void F() {
      Console.WriteLine("B.F");
   } 
   override public void G() {
      Console.WriteLine("B.G");
   } 
}

class C: B
{
   override public void G() {
      Console.WriteLine("C.G");
   } 
}

В приведенном выше вопросе я хочу знать, что у класса c нет метода с именем f (), я имею в виду, если я создам его объект и получу доступ к методу f (), он выдаст ошибку или нет? Если да, то я хочу знать, что из-за класса наследования c должен иметь метод с именем f () класса A ... поэтому я не могу вызвать это?

1 Ответ

2 голосов
/ 31 октября 2010

Вы не можете удалить методы в базовом классе из производного класса;это нарушит LSP и может быть тривиально побеждено простым броском на базу.Ключевое слово sealed предотвращает переопределение метода любым производным классом;это не скрывает это.

...