Как правильно привести класс к абстрактному классу при использовании обобщений типов?
У меня есть следующие классы
public abstract class BaseViewPresenter { }
public abstract class BaseView<T> : UserControl
where T : BaseViewPresenter { }
public class LoginPresenter : BaseViewPresenter { }
public partial class LoginView : BaseView<LoginPresenter> { }
У меня есть метод, который выглядит так (упрощенно)
public BaseView<BaseViewPresenter> Resolve(BaseViewPresenter model)
{
var type = model.GetType();
var viewType = _dataTemplates[type];
// Correctly creates BaseView object
var control = Activator.CreateInstance(viewType);
// Fails to cast as BaseView<BaseViewPresenter> so returns null
return control as BaseView<BaseViewPresenter>;
}
Когда я вызываю это, используя экземпляры LoginPresenter
var login = new LoginPresenter();
var ctl = Resolve(login);
ЛинияActivator.CreateInstance(viewType)
правильно разрешается в новых экземплярах моегоLoginView
, тем не мениеcontrol as BaseView<BaseViewPresenter>
не может сделать бросок правильно, поэтому возвращаетсяnull
.
Есть ли способ правильно разыгратьcontrol
вBaseView<BaseViewPresenter>
без использования определенных типов дженериков?
посколькуLoginView
наследует отBaseView<LoginPresenter>
, а такжеLoginPresenter
наследует отBaseViewPresenter
Я бы предположил, что есть способ конвертироватьLoginView
вBaseView<BaseViewPresenter>
.
Я застрял с использованием .Net 3.5