我有一个泛型委托,它在像这样的单例类中实现;
public class BBCacheMethods
{
private static BBCacheMethods instance;
private BBCacheMethods() { }
public static BBCacheMethods Instance
{
get
{
if (instance == null)
{
instance = new BBCacheMethods();
}
return instance;
}
}
public T GetResUstPolitikaBelgeTurlerisForCache<T>() where T:class
{
return null;
}
public delegate T MethodToInvokeDelegate<T>();
public static MethodToInvokeDelegate<T> MethodToInvoke<T>() where T : class
{
MethodInfo method = Instance
.GetType()
.GetMethod("GetResUstPolitikaBelgeTurlerisForCache");
if (null != method)
{
return (MethodToInvokeDelegate<T>)Delegate.CreateDelegate(
typeof(MethodToInvokeDelegate<T>),
Instance,
method);
}
else
throw new FaultException("");
}
当我调用委托时,我收到此错误:
无法绑定到目标方法,因为其签名或安全透明度与委托类型的方法不兼容。
调用委托的类以这种方式调用它:
public static void loadCache<T>() where T : class
{
var aa = BBCacheMethods.MethodToInvoke<T>();
}
我没有找到为什么会收到这样的错误,感谢任何帮助。
答案 0 :(得分:1)
我不认为你想要的实际上是可能的。委托规范中使用的泛型参数T必须与方法GetResUstPolitikaBelgeTurlerisForCache和MethodToInvoke中的T相同,但框架不能假设这一点。
我得到了一些使用通用单例类的东西:
public class BBCacheMethods<T> where T:class
{
private static BBCacheMethods<T> instance;
private BBCacheMethods() { }
public static BBCacheMethods<T> Instance
{
get
{
if (instance == null)
{
instance = new BBCacheMethods<T>();
}
return instance;
}
}
public T GetResUstPolitikaBelgeTurlerisForCache()
{
return null;
}
public delegate T MethodToInvokeDelegate();
public static MethodToInvokeDelegate MethodToInvoke()
{
MethodInfo method = Instance.GetType().GetMethod("GetResUstPolitikaBelgeTurlerisForCache");
if (null != method)
{
return (MethodToInvokeDelegate)Delegate.CreateDelegate(typeof(MethodToInvokeDelegate), Instance, method);
}
else
throw new FaultException("");
}
然后您可以按如下方式调用它:
var aa = BBCacheMethods<T>.MethodToInvoke();
var result = aa();