-1

私は次のクラスを持っています:

 Class A {}

 Class B: A {}

 Class C: A {}

現在、B または C にデータを入力する 2 つの関数があります。現時点では、一方が作成New B()し、もう一方が作成するため、2 つの関数が必要ですNew C()

BまたはCのいずれかを使用するように指示できる関数が1つだけ欲しい. クラスを送信してそれを埋めるように指示することはできず、呼び出された関数はその場でクラスを作成できる必要があります.

4

2 に答える 2

3

newtype引数に制約を付けてジェネリック関数を書くことができます。

class FillerOfBsAndCs {
    A Fill<T>() where T : new(), A {
        // do the preparations...
        T res = new T();
        // fill res with data
        return res;
    }
}

これで、このメソッドを次のように呼び出すことができます。

FillerOfBsAndCs filler = new FillerOfBsAndCs();
A a1 = filler.Fill<B>();
A a2 = filler.Fill<C>();
于 2012-07-16T03:44:32.287 に答える
1

一般的な方法の使用を検討してください

public T FillA<T>() where T : A, new()
{
    T newobj = new T();
    newobj.AProperty1 = valueForProperty1;
    newobj.AProperty2 = valueForProperty2;
    // etc.
    return newobj;
}
于 2012-07-16T03:44:33.440 に答える