我有以下内容,有时我需要Failures
为Validations
. 我们假设每个派生自的类型都有Validation
一个且只有一个派生自上述实现的类型。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
, 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 {
...
}