2013-02-13 15 views
5

タイトルに間違った言葉が含まれている可能性がありますので、正しい言葉を表示してください。C#ジェネリッククラスのインスタンスを作成する

私は、ジェネリック型Tを受け入れDAL_Baseと呼ばれる基本クラスを持っています。タイプTは、Business Objectsレイヤーの多くのクラスから来ており、それぞれに対応するデータアクセスレイヤーがあります。

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もこれをカバーしていないようです。

+1

一般的なクラスまたは構造体のインスタンスコンストラクタの書き方_必要な場合は、同じ構文を 'static'コンストラクタにも使用します。 **コンストラクター**は、人々が 'new'オブジェクト式を書くときに実行するメソッドのようなメンバーです。 –

答えて

8

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

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

私は答えにビート! :) – CodingGorilla

+0

ああ男!それはとても簡単でした。私はそれを試みたことはありません。ありがとう。 – jp2code

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>(); 
    } 
+0

それはまさに私がやりたいと思っているものです! – jp2code

4

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

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

関連する問題