为什么我可以在非对象变量上调用带有对象参数的方法?

Why can I call a method with an object argument on a non-object variable?

我用 C# 编写了这段代码:

public static double method ()
{ 
    return 1.3;
}

public static Boolean methodO(object o)
{ 
    return o.Equals(1.3);
}

public static void Main()
{
    System.Console.WriteLine(methodO(method())); // prints 'true'
}

为什么编译?

这是因为"everything in C# is an object",所以即使它是原始类型它也是一个对象所以它实现了"Equals"方法?

您可以将值类型(double、int 等)传递给需要对象的方法的原因是 .Net 会自动将值类型转换为对象。此过程称为装箱,您可以在 MSDN 上阅读更多相关信息:https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx

另一种思考方式,这段代码是否完全有效:

int i = 5;
object o = i; //box i into an object
int y = (int)o;  //unbox o into an int

您还应注意,这样做会降低性能。