public class A {} public class B : A {} public void doSomething(ref A classA) { }
뭐 이런 함수가 있다고 치자.
A a = new A();
doSomething(ref a);
이렇게 호출이 가능하다. 생각해보면 클래스 B로도 호출이 될것같으나, 컴파일 에러가 난다.
해결방법은?
두가지가 있다.
1. 클래스는 원래 call by reference로 인자가 전달되기 때문에 함수 선언에 ref를 빼는 방법.
2. 템플릿을 이용한다. (출처: http://stackoverflow.com/questions/1428996/why-cant-i-cast-a-ref-parameter)
1번은 간단하니 적당히 ref를 지우면 되고
2번은 다음과 같이 함수를 바꿀 수 있다.
public void doSomething <T> (ref T classA) where T : A { }
이렇게 템플릿 함수를 만들고 T의 타입을 밝혀주면 B클래스도 이 함수를 사용할 수 있게 된다.
'Programming' 카테고리의 다른 글
특정 안드로이드 기기에서 '패키지 파일이 올바르지 않습니다' 에러 (1) | 2014.06.27 |
---|---|
[AS3] Inspectable 변수 초기화 (0) | 2013.10.03 |
cocos2d-x 윈도우 키보드 지원 (0) | 2013.04.06 |
콘솔에서 액티비티 실행하기 (0) | 2012.11.24 |
svn에서 forbidden으로 repository 접근이 안되는 경우 (1) | 2012.07.05 |