私はデータベースアクセスのための私の慣例をカプセル化した単純な基本クラスを作成しようとしています。私は一般にproductIDに基づいて製品を選択するために "products_retrieve_product"という名前のsprocを作成します。基本クラスの "Retrieve"メソッドで、派生クラスが定義する型を返すようにしたいと思います。 Genericsで可能なことを達成しようとしていますか?基本クラスのメソッドを通じて汎用型を返すにはどうすればよいですか?
public class MyBaseClass<T> : T
現在ジェネリックでは不可能である:あなたが本当に行うことができるために必要なものをクラス定義の中でこのようなものがあるので
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;
}
}
私がこだわっている部分は、「検索」方法は派生型にオブジェクトをキャストする方法です。 –
メソッドの戻り値の型として既に宣言されているので、キャストする必要はありません。 "return this;"あなたが必要とする仕事はありますか? –
私はあなたが派生クラスにあるメソッドについて話していると思うが、私は基本クラスの派生クラスに基づいて型を返すメソッドを実装したいと思います。 –