为什么我可以在非对象变量上调用带有对象参数的方法?
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
您还应注意,这样做会降低性能。
我用 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
您还应注意,这样做会降低性能。