インタフェースのジェネリック型と同じで、コンパイラの警告が発生します。IRepositoryインターフェース
私の質問は次のとおりです。Loadメソッドは実際には汎用であることを意図していたのですか、それとも間違いでしたか?メソッドが汎用であることが意図されていた場合、コンパイラを幸せにするために型名を "T"から "E"のようなものに変更する必要がありますか?
インタフェースのジェネリック型と同じで、コンパイラの警告が発生します。IRepositoryインターフェース
私の質問は次のとおりです。Loadメソッドは実際には汎用であることを意図していたのですか、それとも間違いでしたか?メソッドが汎用であることが意図されていた場合、コンパイラを幸せにするために型名を "T"から "E"のようなものに変更する必要がありますか?
彼らが異なることになっていない - あなたがそこに定義を削除することができるように負荷がレポ取引「タイプ」に取り組むことになっている(私はそれはあなたがやっているものだと仮定)
彼らはクラスレベルTと違って制約があるので、彼らは異なっているはずです。
ヒントをお寄せいただきありがとうございます。これは別の質問をもたらします: 私が署名を boolに変更した場合
@Weiマ - ?申し訳ありませんが、」することができます –
は次のように私には見えますclass
とnew
の制約は、メソッドレベルではなく、クラスレベルにする必要があります。 IRepository<int>
Load<string>
を持つことは私にはかなり奇妙に思える
IRepository<int> intRepository = new RepositoryImpl<int>();
object o;
intRepository.Load<string>(o, "column", "value");
: -
はそうでない場合は、ええ、あなたはちょうど私がこれを行う可能性があるため、地獄のようにただ混乱して2つの異なるT制約を定義しました。
それはTのみLoad
方法ではなく、他人のためにclass
とnew
でなければならない可能です。しかし、その結果を生成するために私は考えることができる最も近い制約です - TClass
はT
からをちょうど継承する可能性があるため、正確に同じではありません
interface IRepository<T> {
IQueryable<T> GetAll();
bool Load<TClass>(TClass item, string column, object value) where TClass : class, T, new();
}
:その場合は、次のようなものがよいでしょう。
なぜ宣言は自分の制約を追加するのですか? –
OK、私はそれに応じてコードを修正しました。コンパイラのエラーが発生しました。他のいくつかを修正しなければなりませんでした。プロジェクトをコンパイルするためのファイル。すぐに変更を提出して、正しいことをしているかどうかを確認できます。 –