私はDbContext
クラスを持っています。たとえば:c#ジェネリックのためにこのクラスを使用する
class Contact extends DbContext {}
クラスDbContext
の中では、私はジェネリックでDbContextを拡張する方クラスを使用します:
public static IEnumerable<DBContext> GetAll()
{
var sql = "SELECT * FROM " + TableName();
return DB().Fetch<DBContext> (sql);
}
注IEnumerableを< DBContext>ここに。
上記のコードは問題ありませんが、毎回タイプキャストする必要があります。
public static IEnumerable<thisClass> GetAll()
{
var sql = "SELECT * FROM " + TableName();
return DB().Fetch<thisClass> (sql);
}
注IEnumerableを< thisClass>ここに:私のようなものthisClass
を達成することができます。 DStanleyさんのコメントの後
:
public static IEnumerable<T> GetAll<T>()
{
var sql = "SELECT * FROM " + TableName();
return DB().Fetch<T> (sql);
}
しかし、私はこのように呼び出すにしたくない:
私が実行しようとしました
Contact.GetAll<Contact>();
ないきれい。右?
注:TableName()はここで心配するものではありません。それは、それが呼び出されるクラスに基づいて私の方法でSQLメソッドを取得します。
「public static IEnumerable GetAll ()ここでT:DbContext'と宣言し、ウサギの穴までの距離を確認してください。 'TableName()'が何をするのか、またそれが汎用的である必要があるのかは不明です。 –
またはhttps://en.wikipedia.org/wiki/Curiously_recurring_template_pattern – SLaks
@Dスタンリーを使用してください。私は実際に行ったが、毎回クラスに合格したくない。私はそれについて私の質問を更新します。 – tika