当参数的确切类型未知时创建委托
Create a delegate when the exact type of the argument is unknown
我在为此实例方法创建正确的委托时遇到了一些麻烦:
public T AddComponent<T>() where T : Component
{
....
}
我正在使用反射来获取特定的 MethodInfo,然后 Delegate.CreateDelegate 我收到绑定到目标方法的错误
private delegate T AddComponent<out T>();
private static AddComponent<Component> AddC { get; set; }
public void Test()
{
var go = new GameObject();
var targetAddComponent =
typeof (GameObject).GetMethods().First(m => m.Name == "AddComponent" && m.GetParameters().Length == 0);
AddC = (AddComponent<Component>) Delegate.CreateDelegate(typeof (AddComponent<Component>), go, targetAddComponent, true);
....
}
你知道我做错了什么吗?
方法信息是方法 GameObject.AddComponent<T>
的方法信息,其中 returns T。委托,您令人难以置信地混淆了与方法相同的名称,必须是 returns T 的方法 returns Component
。你做了什么使 T 等于 Component?没有。
换句话说:方法信息是一些在构造之前实际上不是可调用方法的方法信息。它是制作方法的通用模式,而不是方法。如果您想委托给它,请将其设为方法。您需要在方法中为类型参数 T 提供类型参数。
我在为此实例方法创建正确的委托时遇到了一些麻烦:
public T AddComponent<T>() where T : Component
{
....
}
我正在使用反射来获取特定的 MethodInfo,然后 Delegate.CreateDelegate 我收到绑定到目标方法的错误
private delegate T AddComponent<out T>();
private static AddComponent<Component> AddC { get; set; }
public void Test()
{
var go = new GameObject();
var targetAddComponent =
typeof (GameObject).GetMethods().First(m => m.Name == "AddComponent" && m.GetParameters().Length == 0);
AddC = (AddComponent<Component>) Delegate.CreateDelegate(typeof (AddComponent<Component>), go, targetAddComponent, true);
....
}
你知道我做错了什么吗?
方法信息是方法 GameObject.AddComponent<T>
的方法信息,其中 returns T。委托,您令人难以置信地混淆了与方法相同的名称,必须是 returns T 的方法 returns Component
。你做了什么使 T 等于 Component?没有。
换句话说:方法信息是一些在构造之前实际上不是可调用方法的方法信息。它是制作方法的通用模式,而不是方法。如果您想委托给它,请将其设为方法。您需要在方法中为类型参数 T 提供类型参数。