<메소드 오버라이딩>
오버라이딩(Overriding)은 무시하다. 짓밟다의 뜻이 있다.
메소드 오버라이딩은 기존의 메소드를 완전히 무시하고
새로운 기능을 입히는 것을 말한다.
New 키워드를 사용하면 과거를 숨기고 새로운 모습으로
다시 태어날 수 있다. Override가 new와 다른 것은
메소드와 프로퍼티만 재정의 할 수 있고, 사용하기 위해서는
몇 가지 제약이 있다는 것이다.
Override는 abstract, virtual, override 속성을 가진
메소드만 재정의 할 수 있다. 애초에 override 되기 위한
준비를 하고 있는 메소드만 override할 수 있다는 것이다.
<메소드 오버라이딩- new>
접근제어자 new 반환형 메소드이름([인자])
여기서 new는 "이 메소드를 새로 쓰겠다." 라고 C#
컴파일러에게 일러주고 있다. new 제한자는 메소드 뿐
아니라, 부모클래스의 모든 멤버를 숨길 수 있다. 이렇게
부모클래스의 멤버를 숨기면 자식 클래스는 이 멤버를
마치 부모에게서 물려받지 않고 자신이 만들어 낸 것처럼
새롭게 쓸 수가 있는 것이다.
ex)
class Over
{
int a = 55;
}
class Derived : Over
{
new int x = 100;
}
ex)
/* 2/24 객체지향적 프로그래밍(상속: new(접근제한자))*/
using System;
class shape
{
public void Draw()
{
Console.WriteLine("이곳은 shape 클래스의 메소드 입니다.");
}
}
class triangle : shape
{
public new void Draw() /* 여기서 new(접근제한자)는 아버지클래스인 shape의 함수
Draw()의 값을 숨기고
또다른 Draw()함수를 생성해서 다른 값을 주는것임.
즉 같은 이름의 Draw()함수일지라도 결국 다른 함수인 것이다. */
{
Console.WriteLine("이곳은 triangle 클래스의 메소드 입니다.");
base.Draw(); /*base 키워드는 부모클래스의 메소드 호출후 출력
즉 기존에 숨겼던 아버지클래스의 Draw()함수의 값을 다시 출력함. */
}
}
class newbase
{
public static void Main()
{
shape s = new shape(); //객체 생성후 메모리 등록
s.Draw();
triangle t = new triangle();
t.Draw();
}
}
[출처] 곰탱이의 블로그