new ?
- new는 말 그대로 '새로 만든다' 이다. 메소드에서도 new 키워드는 새로 만드는 역할을 한다.
부모클래스 - 자식클래스 의 상속관계에서도 예외는 아니다.
new는 기존의 것(자신이 상속받은 부모클래스의 메소드)를 완전히 무시하고 같은 이름의 새로운 메소드를 만들때 사용한다.
override ?
- override 도 자신이 상속받은 부모클래스의 메소드를 다르게 만드는 것이긴 하지만 이 경우는
'새로 만든다' 보다는 '다시 만든다' 라는 표현이 더욱 적절하지 않을까 싶다.
new VS override ?
- ex ))) new는 필기가 되어있는 기존의 노트 한 권과 새 노트 한 권이 있다면 새 노트에 새로운 필기를 하여 그 것으로 공부를 하는 것이고
(기존의 노트와 새 노트는 완전 별개)
override는 기존에 필기가 되어있는 노트에 새로운 내용을 추가한다거나 있던 내용을 지우고 다시 쓰는 것이라고 할 수 있을 것이다.
(기존의 노트이지만 내용만 달라짐)
기본적으로 클래스를 선언하고 생성하면 자신이 선언된 형에 해당하는 메소드를 호출한다.
그 예로 Parents test = new Child(); 같이 업캐스팅을 할 경우 A는 자식클래스로 생성이 되었지만 부모클래스의 형으로 형변환이 되어
메소드를 호출할 경우 부모클래스가 갖고 있는 메소드를 호출하게 된다. 이 것은 new를 쓸 때도 마찬가지이다.
Parents의 A라는 메소드를 Child에서 new를 이용하여 새로 만들었다고 가정하자.
public class Child : Parents
{
public new void A(){ …… }
}
Parents test = new Child();
test.A();
위 코드를 실행시킬 경우 Child의 A메소드는 Parents의 A메소드와 상관없이 완전히 새로 만든 것이기 때문에
새 노트가 아닌 기존의 노트를 꺼내보듯이
Parents 형으로 만들어진 test는 자신이 갖고 있는 Parents의 A메소드를 호출하게 된다.
하지만, override를 이용할경우, ( override는 같은 이름의 메소드를 부모클래스에서 virtual 로 만들었을 때만 쓸 수 있다 )
publid class Parents
{
public virtual void A() { …… }
}
public class Child : Parents
{
public override void A(){ …… }
}
Parents test = new Child();
test.A();
위 코드를 실행시키면 Parents 형으로 선언된 test라 할지라도 Child 에 있는 A 메소드를 호출하게 된다.
위에서 얘기했듯이 override는 기존의 노트에 새로운 내용을 추가하거나 지우고 다시쓰는 것으로
노트 자체는 변함이 없지만 내용이 달라졌기 때문에 기존의 노트를 꺼냈을 때 달라진 내용이 있는 것이다.
new 와 override( + virtual) 은 업캐스팅이 아니라면 둘 다 기존의 메소드를 재정의 하는 것으로 같은 기능을 하지만
업캐스팅의 경우 전혀 다른 결과를 가져오는 메소드 재정의 방법들이다.
'C#' 카테고리의 다른 글
C#에서 XML파일 탐색하기. (0) | 2019.06.26 |
---|---|
C#에서 XML파일 만들고 자식노드 핸들링해보기(replace) (0) | 2019.06.26 |
c# Window Form TreeView 삭제/추가/노드개수 (0) | 2019.06.26 |
C# mssql 연결하기 (0) | 2019.06.26 |
c# DateTime 날짜포맷 (0) | 2019.06.26 |