インターフェイスの周りに頭を下げるのに問題があります。これは、その後、私の部分クラス内に実装されてインターフェイスメソッド戻り値の型は、インターフェイスを実装するクラスです。
public interface IData<T>
{
IData<T> Select(int id);
List<T> SelectMultiple();
void Insert();
void Update();
void Delete();
}
:
public partial class Post : IData<Post>
{
public IData<Post> Select(int id)
{
MyDataContext dc = MyDataContext.Create();
return dc.Posts.Single(p => p.PostID == id);
}
public List<Post> SelectMultiple()
{
MyDataContext dc = MyDataContext.Create();
return dc.Posts.ToList();
}
// Update() and Delete() declarations
}
ここで同様の質問を通してトロール後、私はすべての私のクラスのために必要なCRUD操作を定義するために、次のインターフェイスを作ってみました
Post p = new Post().Select(1);
それはでき暗黙的conveないで失敗します。
これは、すべては私がポストセレクト()メソッドを使用しようとただした場合、罰金コンパイルrtは 'IData'を 'Post'にタイプします。明示的な変換があります(キャストが欠けていますか?)
これは意味がありますが、キャストは不要ですか?私は選択がポストを返すようにしたい(ただし、ポストをインターフェースレベルでの戻り値の型として定義しない)。私はインターフェイスを誤解したのですか、それとも私ができる簡単な変更がありますか?
あなたの 'Post'は懸念を混ぜているようです。 CRUDを実行し、投稿を保持します。私はそれを2つのクラスに分割します。 'Post'と' PostStorage'です。 – strager
投稿はSQL Serverに格納され、LinqToSQL DBMLを介してアクセスされます。上記のPostクラスは、DBML内のPostの部分クラスです。 – Lazlow