[C#] 6.2.4 virtual 가상화, override 재정의

new 키워드로 기반 클래스의 멤버를 무효화 할 때는 사용하는 변수 형식의 멤버를 사용합니다. 이러한 특징은 기반 형식의 변수로 다양한 파생 개체를 참조할 때 실제 개체에 정의된 멤버가 사용되지 않으므로 다형성의 장점을 충분히 사용하지 못합니다.

C#에서는 기반 형식에서 정의한 멤버를 파생 형식에서 재정의하면 변수의 형식이 아닌 개체의 형식의 멤버가 동작하게 virtual 키워드와 override 키워드를 제공합니다. 기반 형식에서 virtual 키워드를 명시하여 멤버를 선언하면 가상 멤버가 됩니다. 이때 파생 형식에서 기반 형식의 가상 멤버를 재정의할 때는 override 키워드를 명시합니다.

▶ virtual로 가상 메서드 선언, override로 재정의

class Man
{
    internal virtual void Work() //virtual 키워드로 가상 메서드 선언
    {
        Console.WriteLine("일을 하다.");
    }
}
class Student : Man
{
    internal override void Work() //override로 기반 형식의 가상 메서드 재정의
    {
        Console.WriteLine("공부하다.");
    }
}

class Program
{
    static void Main()
    {
        Man man = new Student();
        man.Work();
    }
}

▶ 실행 결과

공부하다.