我有以下内容,在某些时候我需要为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>
给定T
的类型。
我能够实例化Failure<T>
(Failure1
,Failure2
等...),但我找不到如何在公共字段{{1}上调用link
我新创建的reference
个实例(通过对我Failure
,GetMethod
,MakeGenericMethod
等进行所有有用的使用...)
Invoke
答案 0 :(得分:1)
让失败以与IFailure
和IEnumerable
IEnumerable<T>
接口以及通用接口
在ValidationRule
中创建一个必须由每个具体验证
public ValidationRule1 : ValidationRule
{
public override IFailure ToFailure()
{
return new Failure1(this);
}
...
}
答案 1 :(得分:1)
link
是私有的,因为您未指定其他可访问性。设为public
或internal
:
public class MyReferenceClass<T>
where T : Object, new() {
public void link(T arg) { ... }
}
然后你可以通过引用属性从Failure<T>
调用它:
public abstract class Failure<T>
where T : ValidationRule, new()
{
protected T Validation {get; set;};
public MyReferenceClass<T> reference;
}
public class Failure1 : Failure<Validation1>
{
public void Test()
{
this.reference.link(Validation);
}
}