【问题标题】:C#: Generic Parameter vs Object type parameter [duplicate]C#:通用参数与对象类型参数[重复]
【发布时间】:2018-12-20 03:12:27
【问题描述】:

我有两个重载方法,一个是期望对象类型参数和其他通用参数列表。我试图了解何时调用哪个函数。我正在传递字符串对象,它正在调用通用参数方法。

class Program
{
    static void Main(string[] args)
    {
        string s = "string";
        Invoke(s);
        Console.ReadLine();
    }

    static void Invoke(object s)
    {
        Console.WriteLine("Object param invoked");
    }

    static void Invoke<T>(params T[] values)
    {
        Console.WriteLine("Params method invoked");
    }
}

它给出的输出是:'Params method invoked'。

但我不确定为什么总是调用这个方法。我也尝试过传递 int 参数,但又调用了 params 方法。请如果有人可以为我解释一下。谢谢。

【问题讨论】:

  • 传递object 时会发生什么?
  • 检查重载时最严格的重载首先被调用,在这种情况下Invoke&lt;string&gt;(string value)被首先检查并被调用。
  • @bradbury9 在这种情况下什么时候会调用对象参数方法?
  • @RanaMujahid object s = "string"; Invoke(s); 会这样做。
  • 我可以说当我将字符串对象传递给方法编译器时将其读取为 Invoke 并且现在参数类型变为字符串?字符串比对象更具体。因此调用了 Params 方法。我说的对吗?

标签: c# .net


【解决方案1】:

简而言之,类型 TObject 更具体,因为 Invoke&lt;string&gt; 是一个有效的调用。

【讨论】:

  • 为了补充这个答案,编译器可以推断类型参数;这就是为什么 OP 不需要写 Invoke&lt;string&gt;(s);。请参阅generics documentation
猜你喜欢
  • 1970-01-01
  • 2014-07-23
  • 2016-12-28
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2021-07-22
相关资源
最近更新 更多