-1

問題: 複数回継承するエンティティ クラス (基本クラス) があります。これで、すべての派生クラスにAdd-method と-method があります。Validateこれらの関数はすべての派生クラスで同一であり、static.

これが私のAdd方法です

public static long Add(DBData[] UserData)
{
    SortedDictionary<string, DBData> Data = new SortedDictionary<string, DBData>();

    foreach (DBData d in UserData)
    {
        Data.Add(d.FieldName, d);
    }

    if (Project.Validate(Data, OperationMode.Add))
    {
        return DBUtility.Insert("Project", VSCommon.Serialise(Data));
    }
    else
    {
        return -1;
    }
}

ここでProject、上記の関数に " " があります (2 か所、1 つはProjectこの関数タイプのオブジェクトも属する場合、もう 1 つはデータベース テーブル名です)。これらは、すべての派生クラスの唯一の違いです。このメソッドを基本クラスに入れたいAddので、すべての派生クラスで何度も書くのをスキップできます。

検索したところ、ジェネリックを使用しようとしている人がいることがわかりましたが、ジェネリック宣言を使用するときのようにそれを拾うようには見えませんでした。Validate-methodを呼び出すと、コンパイル エラーが発生しました。stringまた、関連するテーブル名を取得するためにクラスの名前が必要です。

自分の問題を定義できるかどうかわからないので、助けていただければ幸いです。ありがとう。

4

2 に答える 2

0

このクラスの「Project」と他のクラスの他の文字列を返す(基本クラスと仮想の抽象)メソッドを追加できます。次に、静的な Add メソッドからそれを参照するだけです。

必要に応じて、reflecion を使用して「Project」文字列を取得することもできると思います。ただし、データベースとコードの間に不要な結合が追加されるため、これを行うことはお勧めしません。

于 2013-04-24T08:34:44.267 に答える