2012-03-18 4 views
2

この型をInterfaceから継承したクラスにする方法を指定するには?私は様々な変種を試みましたが、意味がありません。特にあなたが引用2つの形式、組み合わせ汎用制約を指定する方法:class interfaceから継承しますか?

public class CarDal<TCarMark> where TCarMark:class//also tried ICarMark 
{ 
    ... 
    private static readonly DataContext Context = new DataContext(ConnectionString); 
    private Table<ICarMark> _tblCarMarks = Context.GetTable<TCarMark>();//Error is "Cannot convert source type 'Table<TCarMark> to target type Table<ICarMark>'" 
    ... 
} 
+1

ちなみに、静的データコンテキストは実際には本当に悪い考えです。 –

+0

私は考慮しますが、理由を教えてください。 (リンクまたは短いコメントを提供する)ありがとう。 – Yara

+0

は私の答えにそれを加えました。 **これは大きな問題を引き起こす** –

答えて

5

あなたの制約は、罰金です:

where TCarMark : class, ICarMark 

問題は分散です。しかし

private Table<TCarMark> _tblCarMarks = Context.GetTable<TCarMark>(); 
// emphasis: ^^^ 

Table<TCarMark>Table<ICarMark>

とは共変/反変な関係を持っていないあなたは、このクラスthrought Table<TCarMark>を使用する必要があります!静的データ・コンテキストを使用しないでください:

  • それはスレッドセーフではありません
  • それはあなたのデータコンテキストが(仕事の単位ではなく、アプリケーションであることを意味する時間をかけて成長を意味します生涯オブジェクト)
関連する問題