공변성과 반 공변성

Download Report

Transcript 공변성과 반 공변성

Chpt -1



어떤 메소드를 선언하면 지정된 타입 외에 다른 타입을 인자로 넘겨받
으려면 메소드를 오버라이딩 해야하는 난점이 발생하는데
클래스 상속 관계에 있는 인자 혹은 인자로 넘겨받을 수 있는 멤버들은
공변환 형태로 인자로 넘기고 받을 수 있는 방법이 존재한다.
인자가 있는 델리게이트의 경우 함수 호출의 방법 때문에 이 형변환 관
계가 역전된 걸로 보인다.

자식 클래스는 부모 클래스로 형 변환 할 수
있다. 반대는 안된다.
부모 클래스
해당 기능이 잘
려나감
자식 클래스
부모 클래스
해당 기능이
없음
자식 클래스

델리게이트의 리턴타입이 부모 클래스면 부모 클래스와 자식 클래스
타입을 리턴타하는 모든 함수를 대입할 수 있다.





sataic object GetObject(){return null;}
static void SetObject(object obj}{}
static string Getstring(){return ””;}
static void SetString(string str){}
Func<object> del = Getstring;
Object del
String Getstring




델리게이트의 인자가 자식 클래스면 자식 클래스와 부모 클래스를 인
자로 갖는 모든 함수를 델리게이트에 쓸 수 있다.
Action<string> del2 = SetObject;
인자는 델리게이트에 대입된 함수를 호출할 때 대입이 일어남
코드에서 보면 관계가 역전된걸로 보인다.
SetObject
object
del2
string