Wie kann man eine Klasse bei Verwendung von Typgenerika korrekt in eine abstrakte Klasse umwandeln?
Ich habe die folgenden Klassen
public abstract class BaseViewPresenter { }
public abstract class BaseView<T> : UserControl
where T : BaseViewPresenter { }
public class LoginPresenter : BaseViewPresenter { }
public partial class LoginView : BaseView<LoginPresenter> { }
Ich habe eine Methode, die so aussieht (vereinfacht)
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>;
}
Wenn ich dies mit einer Instanz von LoginPresenter aufrufe
var login = new LoginPresenter();
var ctl = Resolve(login);
Die LinieActivator.CreateInstance(viewType)
wird korrekt in eine neue Instanz von my @ aufgelöLoginView
, jedochcontrol as BaseView<BaseViewPresenter>
kann die Besetzung nicht richtig machen, gibt also @ zurünull
.
Gibt es eine Möglichkeit, das @ richtig zu besetzecontrol
inBaseView<BaseViewPresenter>
ohne Verwendung bestimmter Typgenerika?
Schon seitLoginView
erbt vonBaseView<LoginPresenter>
, undLoginPresenter
erbt vonBaseViewPresenter
, Ich würde annehmen, dass es eine Möglichkeit gibt, @ zu konvertierLoginView
zuBaseView<BaseViewPresenter>
.
Ich bin fest mit .Net 3.5