C# 에서 ref인자가 상속관계가 먹히지 않는 현상

Programming 2013. 1. 24. 13:32 by 빠재

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클래스도 이 함수를 사용할 수 있게 된다.

Nav