我用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&# 34;方法?
答案 0 :(得分:3)
您可以将值类型(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
您还应该意识到执行此操作会降低性能。