effective C# ITEM #20 "interface의 구현과 virtual 메소드의 overriding 을 구분하라" 를 보고 정리.



1.Java에서는 static method를 제외한 모든 method가 virtual method 이다.
   C# 과 C++에선 그렇지 않다.
   C#에서는 Parent 의 method를 virtual 로 선언하면 그것을 override 하는 Child 에서는 반드시 override keyword 를 써줘야 한다.


2.Interface에 있는 method 선언은 virtual 이 아니다. virtual과 무관하다. Interface는 클래스가 해야할 일을 명시하는 일종의 계약일 뿐이다.
   만약 Parent 에서 IEx 를 구현하였고(여기에는 Msg() 가 있다고 하자)
   Child 에서 Parent 를 상속받았고 Msg()를 override 했을 때
   Parent의 ref. 변수로 Child의 객체를 가리키고 있더라도 이 ref. 변수로 Msg()를 call 하면 Child 가 아닌 Parent의 Msg() 가 call 된다.
   
   이를 해결하려면 
   1.Parent의 Msg() 를 virtual 로 변경
   2.Parent 를 수정할 수 없는 경우, Child 에서 IEx 를 상속받아 Msg() 를 override

      즉 이런 형태가 된다.

      class Parent : IEx { ... }
      class Child : Parent { ... }

      였던 것을 아래와 같이 수정

      class Parent : IEx { ... }
      class Child : Parent,IEx { ... }
   
   virtual method가 아닌 method를 override 할 경우에는 new 키워드를 써줘야 한다.
   (C# 이전 버젼에서는 new 를 쓰지 않으면 에러로 처리되었으나 3.0 이상에서는 warning 만 발생하는 듯 하다)

'C#, .NET' 카테고리의 다른 글

Window Message 를 직접 처리하기  (0) 2011.06.17
정밀하게 시간측정 하기.  (0) 2011.06.17
atoi ,itoa  (0) 2011.06.17
다차원 배열. jagged array  (0) 2011.06.17
C++, C#, Java의 문자열 비교  (0) 2011.06.17
Posted by 휘사마
,