J'ai essayé de créer une classe de base simple qui encapsule certaines de mes conventions pour l'accès à la base de données. Je crée généralement un sproc nommé "products_retrieve_product" pour sélectionner un produit basé sur productID. Je voudrais que la méthode "Retrieve" dans la classe de base retourne le type que la classe dérivée fournit dans sa définition. Est ce que j'essaye d'accomplir possible avec des génériques?Comment retourner un type générique via une méthode dans une classe de base?
public class MyBaseClass <T>
{
private string _className;
public MyBaseClass()
{
_className = this.GetType().Name;
}
public virtual T Retrieve(int ID)
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetStoredProcCommand(String.Format("{0}s_Retrieve_{0}", _className));
db.AddInParameter(dbCommand, String.Format("@{0}ID", _className), DbType.Int32, ID);
using (IDataReader dr = db.ExecuteReader(dbCommand))
{
if (dr.Read())
{
BOLoader.LoadDataToProps(this, dr);
}
}
return (T)this;
}
}
La partie que je suis coincé sur la façon dont la méthode est « Récupérer » jette l'objet dans le type dérivé. –
Vous ne devriez pas avoir à le lancer du tout, puisqu'il est déjà déclaré comme le type de retour de la méthode: "return this;" fait le travail dont vous avez besoin. –
Je pense que vous parlez de la méthode dans la classe dérivée, mais j'aimerais que la classe de base implémente une méthode qui renvoie un type basé sur la classe dérivée. –