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

时间:2015-02-04 20:19:36

标签: c# object

我用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;方法?

1 个答案:

答案 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

您还应该意识到执行此操作会降低性能。