C#要在class中使用泛型委托也有泛型

C# To use generice type delegate in class also has generic type

我想制作一个接受 Type 作为参数的 class,与此同时,我想制作一个也是通用类型的委托。示例代码如下。我认为它应该工作,OnGo 委托从 class 声明中接收 Type 作为 TypeAsParam。但是,注释行是错误的。有人知道如何解决这个问题吗?谢谢大家:)

public delegate void OnGo<TypeInDel>(TypeInDel obj);

public class MyClass<TypeAsParam>
{
    public OnGo<TypeAsParam> MyDelegate;
    public void Msg<TypeAsParam>()
    {
        TypeAsParam msg;
        MyDelegate(msg); //here is wrong in VS editor, says cannot cast msg to TypeAsParam(not TypeInDel)
    }
}

问题出在您的 Msg 方法上。您在其中定义了新的 TypeParameter,因此编译器无法确定 class 中的 TypeAsParam 和方法中的 TypeAsParam 相同。您需要从消息中删除 <TypeAsParam> 或进行一些限制。

此外,您需要像这样初始化消息:

var msg = default(TypeAsParam)

通过对其应用约束,它对我有用:

 public delegate void OnGo<TypeInDel>(TypeInDel obj);

        public class MyClass<TypeAsParam> where TypeAsParam : new()
        {
            public OnGo<TypeAsParam> MyDelegate;

            public void Msg()
            {
                TypeAsParam msg =  new TypeAsParam();
                MyDelegate(msg); 
            }
        }

显然这个方法在已经指定类型的 class 中。这意味着您的通用方法 class 也自动成为通用方法。

public class MyClass<TypeAsParam>
      {
         public OnGo<TypeAsParam> MyDelegate;

         public void Msg(TypeAsParam msg)
         {
            MyDelegate(msg); 
         }
      }

这是因为它看到了您的泛型类型 TypeAsParam 的两个单独声明,并认为它们是不同的东西。我还为 msg 对象添加了一个默认值以避免二次编译器错误。更改为:

public delegate void OnGo<TypeInDel>(TypeInDel obj);

public class MyClass<TypeAsParam>
{
    public OnGo<TypeAsParam> MyDelegate;

    public void Msg()
    {
      TypeAsParam msg = default(TypeAsParam);
      MyDelegate(msg); //here is wrong in VS editor, says cannot cast msg to TypeAsParam(not TypeInDel)
    }
}