私は次のものを持っており、ある時点で のために作成する必要がありFailures
ますValidations
。から派生する各型には、前述の の実装であるwhereValidation
から派生する型が 1 つだけあると仮定します。Failure<T>
T
Validation
の実装数が増えているため、次のようなメソッド内で、派生元の正しい型をインスタンス化し、そのメソッドを呼び出すValidation
ことができる必要があります。Failure<T>,
link
void recordFailureForValidation(Validation v) {
Type failureType = dict[v.GetType()];
Object failure = Activator.CreateInstance(failureType);
// how do I call failure.link(v) ?
}
Failure<T>
実行時に、辞書はgivenから派生した型を教えてくれますT
。Failure<T>
( Failure1
、 、など...)をインスタンス化することはできますが、新しく作成したインスタンスの public フィールドFailure2
を呼び出す方法が見つかりません( 、、などの意味のあるすべての用途を使用することによって)。 )link
reference
Failure
GetMethod
MakeGenericMethod
Invoke
public class MyReferenceClass<T>
where T : Object, new() {
public void link(T arg) { ... }
}
public abstract class Failure<T>
where T : ValidationRule, new() {
...
public MyReferenceClass<T> reference;
...
}
public class Failure1 : Failure<Validation1> {
}
public class Failure2 : Failure<Validation2> {
}
public abstract class ValidationRule {
...
}
public class ValidationRule1 : ValidationRule {
...
}
public class ValidationRule2 : ValidationRule {
...
}