virtual / override와 new 모두 다형성과 관련된 키워드이다.
1. virtual/override
virtual로 지정된 부모클래스의 메서드는 가상메서드가 된다. 이 메서드는 override로 지정된 같은 이름(같은 리턴형식, 같은 파라미터 형식)을 가진 자식 클래스의 메서드가 가려버린다.
[code language=”csharp”]
class Program
{
public static void Main(string[] args)
{
BaseClass instance = new SubClass1();
instance.Func1();
instance.Func2();
}
}
class BaseClass
{
public virtual void Func1()
{
Console.WriteLine("Base Func1");
}
public virtual void Func2()
{
Console.WriteLine("Base Func2");
}
}
class SubClass1 : BaseClass
{
public override void Func1()
{
Console.WriteLine("Sub1 Func1");
}
public override void Func2()
{
Console.WriteLine("Sub1 Func2");
}
}
[/code]
위의 코드는 다음을 출력한다.
[code language=”plain” gutter=”false”]
Sub1 Func1
Sub1 Func2
[/code]
비록 BaseClass instance1이지만 SubClass1으로 인스턴스를 만들었기 때문에 오버라이딩된 SubClass1의 Func1과 Func2를 실행시킨다. 메인메서드를 다음과 같이 고쳐도 실행결과는 똑같다.
[code language=”csharp”]
public static void Main(string[] args)
{
BaseClass instance1 = new SubClass1();
(instance1 as BaseClass).Func1();
(instance1 as BaseClass).Func2();
}
[/code]
override와 virtual은 꼭 짝을 이뤄야한다.
답글 남기기