본문 바로가기

C#(ASP.NET)

C#_메소드 오버라이딩(정의, new)


<메소드 오버라이딩>

오버라이딩(Overriding)은 무시하다. 짓밟다의 뜻이 있다.

메소드 오버라이딩은 기존의 메소드를 완전히 무시하고

새로운 기능을 입히는 것을 말한다.

New 키워드를 사용하면 과거를 숨기고 새로운 모습으로

다시 태어날 수 있다. Overridenew와 다른 것은

메소드와 프로퍼티만 재정의 할 수 있고, 사용하기 위해서는

몇 가지 제약이 있다는 것이다.

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();
 }
}

[출처] 곰탱이의 블로그