我用 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'
}
为什么要编译?
这是因为“C# 中的一切都是对象”,所以即使它是原始类型,它也是一个对象,所以它实现了“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
您还应该意识到这样做会降低性能。
关于c# - 为什么我可以在非对象变量上调用带有对象参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28330680/