【发布时间】: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<string>(string value)被首先检查并被调用。 -
@bradbury9 在这种情况下什么时候会调用对象参数方法?
-
@RanaMujahid
object s = "string"; Invoke(s);会这样做。 -
我可以说当我将字符串对象传递给方法编译器时将其读取为 Invoke
并且现在参数类型变为字符串?字符串比对象更具体。因此调用了 Params 方法。我说的对吗?