나는 모든 공분산 질문을 실제로 검색했으며 아무 것도 내 문제와 같이 보이지 않습니다.비 일반 클래스의 C# 공분산
나는 사용자 컨트롤 (이 클래스는 분명한 이유를 들어, 일반적인 캔트)를 가지고, 그것은 다음과 같습니다
class MyUserControl : UserControl
{
private BaseDao<object> _dao;
private AppointmentMapping<object> _mapping;
// I need these 2 generics to type safe the mapping/dao relation
public void RegisterPersistence<T>(BaseDao<T> dao, AppointmentMapping<T> mapping)
{
// These two dont work. even with safe and unsafe casting.
_dao = dao;
_mapping = mapping;
}
}
이미 등 그것을 공분산, 인터페이스에 대한 대리자를 저장하기 위해 노력하고 단지 개체를 저장하지 마십시오! 어떻게해야합니까? 이것은 Java로 쉽게 달성 할 수 있습니다.
이 질문은 'UserControl'과 관련이없는 것으로 보입니다. 모든 수업에서 발생할 수 있습니다. 이 질문을 편집하여 "일반"으로 만들 수 있습니다. –
BaseDao 및 AppointmentMapping의 정의를 알 수는 없지만 실제로 제네릭 클래스 인 경우 제네릭 매개 변수에는 공/대조 변수가 없습니다. in C# – SWeko
요점은 나중에 필드에 액세스하려는 방법을 말하지 않는다는 것입니다. 확실하게 그것들을'object'로 저장하면 효과가 있습니다. 나중에 다른 코드 조각에서 해당 필드에 액세스해야하는 경우 다시 ''이 필요하고 올바른 구현으로 객체로 캐스팅하거나 해당 필드를 대리자 (Action 유형)에 사용하는 코드를 등록 할 수 있습니다. , 예. 나중에 실행하십시오. 그렇지 않으면 BaseDoa와 AppointmentMapping이 비 제네릭 인터페이스를 구현하고이를 필드 유형으로 사용하십시오. –
Sebastian