我试图优化方法而无法找到解决方案..
我有以下课程:
public class X : MyInterface<Model>
{
public void Execute(Model m) { }
}
我正在尝试调用Execute(...) 我知道X的类型,我知道模型的类型。
这有效:
(here logic to find the correct method).Method.Invoke(InstanceX, new object[] { m });
这不会,但应该更快地运作:
(here logic to find the correct method).Method.CreateDelegate(Expression.GetDelegateType(typeof(m)), instanceX);
错误: 无法绑定到目标方法,因为其签名或安全透明度与委托类型的方法不兼容。
再次;尝试优化,所以任何其他比反射Invoke更快的解决方案都会很酷。
答案 0 :(得分:2)
没有反射的解决方案(创建委托):
// assuming existence of class BaseModel and class XModel : BaseModel
public interface IBaseClass {
void Execute(BaseModel model);
}
public abstract class BaseClass<TModel> : IBaseClass where TModel : BaseModel {
public void Execute(BaseModel model) {
this.Execute((TModel)model);
}
protected abstract void Execute(TModel model);
}
public class X : BaseClass<XModel> {
protected override Execute(XModel model) {
...
}
}
样本用法:
var typeX = typeof(X);
var typeXModel = typeof(XModel);
var x = (IBaseClass)Activator.CreateInstance(typeX);
x.Execute((BaseModel)Activator.CreateInstance(typeXModel));