제네릭 기본 클래스 유형을 사용하여 제네릭이 아닌 클래스를 List에 넣고 싶습니다. 그러나 코드는 변환이 불가능하다는 오류와 결합하지 않습니다. 나는 C #을 처음 접했기 때문에 여기에서 매우 기본적인 것을 놓칠 수 있거나 그런 식으로 제네릭을 사용하는 것이 좋은 생각이 아닙니다. 내 코드는 다음과 같습니다.
public abstract class AbstractClass{
public string foo;
}
public class A : AbstractClass{
public int bar
}
public class B : AbstractClass{
public int baz
}
public abstract class AbstractBehaviour<T> : MonoBehaviour where T : AbstractClass{
public T data;
public abstract string compute(T arg);
}
public class ABehaviour : AbstractBehaviour<A>{
//some implementation of compute
}
public class BBehaviour : AbstractBehaviour<B>{
//some implementation of compute
}
이 설정으로 다음과 같이하고 싶습니다.
ABehaviour a = new ABehaviour();
BBehaviour b = new BBehaviour();
List<AbstractBehaviour<AbstractClass>> list = new List<AbstractBehaviour<AbstractClass>>();
list.Add(a);
list.Add(b);
대단히 감사합니다.
AbstractBehaviour<A>
(또는 AbstractBehaviour<B>
)이 아니기 때문에 할 수 없습니다 AbstractBehaviour<AbstractClass>
. 예를 들어 Compute
메소드를 취하면 AbstractBehaviour<AbstractClass>
-for는 유형의 매개 변수로 호출하는 것이 절대적으로 유효하지만이 매개 변수로 호출 AbstractClass
하는 것은 확실히 유효하지 않습니다 AbstractBehaviour<A>.compute
.
또한 C #의 공분산 및 반공 분산 에 대해 읽어보십시오 (하지만 Compute
방법에 도움이되지 않음 ).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다