4

これらのクラスを持つ:

public interface IDbContextFactory
{
    DbContext GetContext();
}

public class Repo<T> : IRepo<T> where T : Entity, new()
{
    protected readonly DbContext c;
}

public Repo(IDbContextFactory f)
{
    c = f.GetContext();
}

キーワードnew()(in class Repo<T>)は何をしますか?

4

3 に答える 3

11

これは、型Tが公開された既定の (つまり、パラメーターのない) コンストラクターを公開する必要があることを意味します。つまり、Twithのインスタンスを構築できるようになりますnew T()。他のコンストラクターも公開できますが、この一般的な制約により、既定のコンストラクターが必須になります。

于 2012-06-25T16:01:57.837 に答える
3

つまり、エンティティにはパラメーターのないパブリック コンストラクターが必要です。

これを参照してください

于 2012-06-25T16:02:19.540 に答える
1

ジェネリック定義でキーワードを使用するwhereと、ジェネリック パラメータに型制約が適用されます。new()制約は、この場合、型に既定のコンストラクターが必要であることを宣言しますThttp://msdn.microsoft.com/en-us/library/sd2w2ew5.aspx


答えを装ったあなたの説明を読んだ後、いくつかのことを明確にすることで助けようと思いました。

元の質問のコードは、具体化されていないコンストラクターによって使用されていると思われるインターフェイスを定義しています。これらの 2 つの定義の間で、あまり機能していないように見えるジェネリック クラスを定義しました。

あなたの質問は一般的なクラスに関係しており、他の2つの定義は質問と回答の両方に無関係です。

于 2012-06-25T16:09:01.327 に答える