我正在使用一种Web服务,它有许多创建不同对象的方法(50)
例如:
CreateObject1(Object1 obj,int arg2)
CreateObject2(Object2 obj,int arg2)
...
CreateObjectX(ObjectX obj,int arg2)
所有对象(Object1,Object2,ObjectX ...)都继承自ObjectBase。
所以我想这样做......
delegate void DlgtCreateObject(ObjectBase obj, int arg2);
public void CreateObject(ObjectBase obj, int arg2)
{
DlgtCreateObject dlgt;
string objType;
string operation;
objType = obj.GetType().ToString();
operation = "Create" + objType.Substring(objType.LastIndexOf(".") + 1);
using (MyWebService service = new MyWebService())
{
dlgt = (DlgtCreateObject)Delegate.CreateDelegate(typeof(DlgtCreateObject),
service,
operation,
false,
true);
dlgt(obj, arg2);
}
}
不幸的是,这给了我一个Failed to Bind异常。 我相信这是因为我的委托签名使用ObjectBase作为其第一个参数,其中函数使用特定的类。
有解决方法吗?
答案 0 :(得分:1)
如果您仅尝试在此处调用方法,建议您使用Type.GetMethod
和MethodBase.Invoke
而不是通过委托。那你就不会遇到这个问题。
答案 1 :(得分:0)
发布后,我认为仿制药可能就是答案,事实上以下似乎也可以做到这一点......
delegate void DlgtCreateObject<T>(T obj, int arg2) where T : ObjectBase;
public void CreateObject<T>(T obj, int arg2) where T : ObjectBase;
{
DlgtCreateObject dlgt;
string objType;
string operation;
objType = obj.GetType().ToString();
operation = "Create" + objType.Substring(objType.LastIndexOf(".") + 1);
using (MyWebService service = new MyWebService())
{
dlgt = (DlgtCreateObject<T>)Delegate.CreateDelegate(typeof(DlgtCreateObject<T>),
service,
operation,
false,
true);
dlgt(obj, arg2);
}
}