5

タイトルが間違っている可能性がありますので、正しい用語を教えてください。

ジェネリック型を受け入れるDAL_Baseという基本クラスがありTます。この型Tは、ビジネス オブジェクト層の多くのクラスから取得され、それぞれに対応するデータ アクセス層があります。

DAL_Baseは、ストアド プロシージャ名を指定できるパラメーターと、メソッドを呼び出してレコードを選択、挿入、更新するために使用するパラメーターを受け入れます。

私が現在立ち往生しているように見えるのは、さまざまな変数を初期化する必要があるDAL_Baseの新しいインスタンスをインスタンス化する方法が見つからないように見えることです。

部分的なリスト:

public class DAL_Base<T> where T : IDisposable, new() {

  public DAL_Base<T>() { // <= ERROR HERE
    // initialize items that will be used in all derived classes
  }

}

VS2010が私に与えているエラーは次のとおりです。

クラス、構造体、またはインターフェイス メンバー宣言の無効なトークン '('

括弧なしでコンストラクターを作成しようとしましたが、それも役に立ちません。

検索すると、返せるように見えるのは、ジェネリック型のインスタンスを作成する方法だけですT。やり方が分かりやすかったです!

MSDN のAn Introduction to C# Genericsも、これをカバーしていないようです。

4

3 に答える 3

8

コンストラクターに山かっこ (<および) を使用しないでください。>

public class DAL_Base<T> where T : IDisposable, new()
{
    public DAL_Base()
    {
    }
}
于 2013-02-13T17:45:56.613 に答える
6

コンストラクターにジェネリック型引数を含めないでください。

public class DAL_Base<T> where T : IDisposable, new() {

  public DAL_Base() { // <= this should work
    // initialize items that will be used in all derived classes
  }

}

クラス自体を型引数で装飾したので、コンストラクターで型を使用できます。

  public DAL_Base() {
     var listOfObjects = new List<T>();
  }
于 2013-02-13T17:46:01.710 に答える
4

public DAL_Base() { // <= NO ERROR HERE :)

クラスはジェネリックですが、コンストラクターはそうではありません。追加のジェネリック パラメーターをコンストラクターに追加しようとしましたが、これは持つことができません。

于 2013-02-13T17:46:34.867 に答える