다음과 같은 수업이 있습니다.
public abstract class ThingBase { }
public class ThingA : ThingBase { }
그리고 다음 일반 클래스 :
public class ThingOwner<ThingType> where ThingType : ThingBase { }
아래와 같이 ThingOwner 인스턴스를 만들고 싶습니다.
ThingOwner<ThingBase> thingOwner = new ThingOwner<ThingA>();
이 코드를 사용하면 다음 오류가 발생합니다. "Cannot implicitly convert type 'ThingOwner (ThingA)'to 'ThingOwner (ThingBase)'" .
나는 그것을 작동시키는 방법을 알 수 없다. 제네릭 클래스와 상속에 대한 기존 토론이 많이 있다는 것을 알고 있지만 거의 모든 것을 시도했지만 저에게 맞는 솔루션을 찾을 수 없었습니다.
감사!
C # 4.0에 도입 된 제네릭 형식에 대해 공분산을 사용해야 합니다. 이 작업을 수행하려면 클래스 대신 인터페이스를 사용해야합니다.
public interface IThingOwner<out ThingType> where ThingType : ThingBase { }
public class ThingOwner<ThingType> : IThingOwner<ThingType>
where ThingType : ThingBase
{
}
IThingOwner<ThingBase> thingOwner = new ThingOwner<ThingA>();
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다