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

标签 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”方法?

最佳答案

您可以将值类型(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/

相关文章:

c# - Enum.TryParse 在 c# 的 vs2008 中不支持

javascript - 解构对象数组 (es6)

javascript 对象.. 将可能的条目限制为两个?

c# - 使用 Amazon Web Services 保密 key

c# - 如何在 C# .Net 4.0 中重启线程?

java - 在 GUI 元素中存储对象引用

javascript - 通过 $parent.$index 和 $index 更新对象 $scope 项

javascript - 如何从外部更改 JavaScript 方法中私有(private)变量的值?

C# 在 switch 语句中没有隐式失败

c# - 根据属性将列表分成多个列表