2012-06-18 4 views
3

Почему результат кода парование является:C# класс полиморфизм

Класс
Класс
Класс

public class A { 
    public virtual void f() { 
     Console.WriteLine("Class A"); 
    } 
} 
public class B : A { 
    public virtual void f() { 
     Console.WriteLine("Class B"); 
    } 
} 
public class C : B { 
    public override void f() { 
     Console.WriteLine("Class C"); 
    } 
} 
//... 
static void Main(string[] args) { 
    A[] array = new A[3]; 
    array[0] = new A(); 
    array[1] = new B(); 
    array[2] = new C(); 
    for(int d = 0; d < 3; d++) 
     array[d].f(); 
} 
+1

если это домашнее задание вопрос поставить «домашнее задание» тег пожалуйста –

+0

Результат ISN» t 'AAA', его класс Class A Class A. – Reniuz

+0

Это не домашнее задание, я прочитал его в книге, и я не понял, почему этот результат. – Mark

ответ

10

Это потому, что virtual не равна override. С помощью ключевого слова virtual вы по существу создаете новый метод, который является виртуальным, но он новичок в вашем классе (класс B) и не переопределяет метод класса A. Класс C, который наследуется от B, не знает о методе класса A f(), поэтому для его переопределения требуется B.f(). И в методе Main вы создаете массив классов A, где существует только метод A.f(). Если вы хотите

Class A 
Class B 
Class C 

выход использовать override вместо virtual в классе B.

+1

Я думаю, он спрашивает, почему он получает «A A A» в качестве выхода. –

+1

Вы правы, исправили, что – Blablablaster

0

AAA, потому что

A[] array = new A[3]; /*main reference to A object*/ 
Смежные вопросы