代码之家  ›  专栏  ›  技术社区  ›  Arad

如果委托不能重载,“Func”和“Action”如何有16个重载?

  •  1
  • Arad  · 技术社区  · 7 年前

    我一直在学习委托(C#),我读过的所有文章都说委托不能重载(与方法不同)。 但当我使用“Func”和“Action”方法(它们是.NET内置的委托)时,我注意到它们被重载了:

    enter image description here

    怎么可能?

    2 回复  |  直到 7 年前
        1
  •  5
  •   Damien_The_Unbeliever    7 年前

    这里的重载是以委婉的方式使用的。

    这里实际告诉您的是,共有16种类型,它们碰巧都是委托类型,并且都有相同的名称。它们采用不同数量的泛型参数这一事实意味着这些类型之间没有实际的关系。

    之所以使用重载术语,是因为委托类型通常在与方法相似的上下文中使用, 如果 它们是方法而不是委托(并且属于相同的包含类型),它们将是重载。

        2
  •  3
  •   Titian Cernicova-Dragomir    7 年前

    不能有一个包含更多重载的委托类型。但是,您可以有几个具有相同名称但具有不同数量的泛型参数的委托类型,例如 Func Action

    这对于方法重载是不同的,重载可以使用不同的类型指定相同数量的参数,多个委托类型必须具有不同数量的泛型参数才能有效

    所以这是无效的

    delegate void A();
    delegate void A(int d);
    

    但这是有效的:

    delegate void A();
    delegate void A<T>(T d);
    

    同样,具有相同名称的不同委托类型也不兼容,它们本质上是不同的类型,只是碰巧共享一个名称。