当参数的确切类型未知时创建委托

本文关键字:创建 未知 类型 参数 | 更新日期: 2023-09-27 18:33:30

我在为这个实例方法创建正确的委托时遇到了一些麻烦:

public T AddComponent<T>() where T : Component
{
      ....
}

正在使用反射来获取特定的方法信息,并且在委托上,我收到错误绑定到目标方法

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> 的方法信息,返回 T。委托,您非常混乱地命名为与方法相同的委托,必须是返回Component的方法。 你做了什么使 T 等于分量? 无。

换句话说:方法信息是某种东西的方法信息,在构造之前实际上不是可调用的方法。它是制作方法的通用模式,而不是方法。如果要对其进行委托,请将其设置为方法。需要在方法中为类型参数 T 提供类型参数。