override 메소드로 구현하게되면 부모클래스에서 호출하면 자식클래스의 오버라이드함수를 수행한다.
new 메소드로 구현하게되면, 기존의 부모와 별개의 함수이므로, 부모클래스에서 호출하면 부모클래스의 원래 함수를 실행하고, 자식클래스에서는 자식클래스의 함수를 실행한다.
출처: C# 5.0 in a nut shell
public class BaseClass
{
public virtual void Foo() { Console.WriteLine("BaseClass.Foo"); }
}
public class Overrider : BaseClass
{
public override void Foo() { Console.WriteLine("Overrider.Foo"); }
}
public class Hider : BaseClass
{
public new void Foo() { Console.WriteLine("Hider.Foo"); }
}
static void Main(string[] args)
{
Overrider over = new Overrider();
BaseClass b1 = over;
over.Foo(); // Override.Foo
b1.Foo(); // Override.Foo
Hider h = new Hider();
BaseClass b2 = h;
h.Foo(); // Hider.Foo
b2.Foo(); // BaseClass.Foo
}
override 메소드로 구현하게되면 부모클래스에서 호출하면 자식클래스의 오버라이드함수를 수행한다.
new 메소드로 구현하게되면, 기존의 부모와 별개의 함수이므로, 부모클래스에서 호출하면 부모클래스의 원래 함수를 실행하고, 자식클래스에서는 자식클래스의 함수를 실행한다.
출처: C# 5.0 in a nut shell