Как привести производный класс к его универсальному родительскому типу?
Этот вопрос полностью содержится в приведенном ниже коде. У меня есть производный класс, который я не могу привести к его универсальному родительскому типу, и я не понимаю, почему.
public interface ISession {} public abstract class SessionBase : ISession, IEnumerable<ISessionState<ISession>> { public List<ISessionState<ISession>> SessionStates = new List<ISessionState<ISession>>(); public IEnumerator<ISessionState<ISession>> GetEnumerator() => SessionStates.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => SessionStates.GetEnumerator(); public void RunStateMethod() { Console.WriteLine( SessionStates[ 0 ].SomeMethod() ); } } public class SessionA : SessionBase { public SessionA() { var t1 = new SessionAState( this ); var t2 = t1 as ISessionState<ISession>; // t2 is null SessionStates.Add( t2 ); } } public interface ISessionState<S> where S : ISession { string SomeMethod(); } public abstract class SessionStateBase<S> : ISessionState<S> where S : ISession { public SessionStateBase( S session ) { Session = session; } public ISession Session { get; } = null; public abstract string SomeMethod(); } public class SessionAState : SessionStateBase<SessionA> { public SessionAState( SessionA session ) : base( session ) {} public override string SomeMethod() => $"Some method in {nameof(SessionAState)}"; }
Что я уже пробовал:
Я пробовал читать о ковариации и контравариантности. Я также пробовал экспериментировать с различными слепками и использованием в и из общие ключевые слова.
Я пришел к пониманию, что мой мозг просто не способен эффективно решать проблемы такого рода, поэтому, пожалуйста, не стесняйтесь указывать на любую полную тупость с моей стороны. Любая помощь или совет будут приняты с большой благодарностью.