私は次のクラスを持っています:
Class A {}
Class B: A {}
Class C: A {}
現在、B または C にデータを入力する 2 つの関数があります。現時点では、一方が作成New B()
し、もう一方が作成するため、2 つの関数が必要ですNew C()
。
BまたはCのいずれかを使用するように指示できる関数が1つだけ欲しい. クラスを送信してそれを埋めるように指示することはできず、呼び出された関数はその場でクラスを作成できる必要があります.
new
type引数に制約を付けてジェネリック関数を書くことができます。
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>();
一般的な方法の使用を検討してください
public T FillA<T>() where T : A, new()
{
T newobj = new T();
newobj.AProperty1 = valueForProperty1;
newobj.AProperty2 = valueForProperty2;
// etc.
return newobj;
}