C#为什么将一个类实例传递给一个接受对象作为参数并将其装回工作的方法

时间:2011-09-06 00:43:23

标签: c# object parameter-passing

例如,让我们考虑以下示例。

 class A
 {
  int i;
  string j;
  double t;
 }

 A a =new A();
 MethodCalled(a);

 void Method(object a)
 {
  A newA = a as A; // This will work even though Class A is down casted to System.Object
 }

有人可以帮我理解这一点。链接参考解释?

由于

1 个答案:

答案 0 :(得分:4)

我没有看到任何拳击正在进行。 Boxing是将值类型(例如int)转换为引用类型的时候。在您的示例中,传递给方法的值是引用类型(class A)。拳击链接:

http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx

所以当你调用Method(或MethodCalled,我认为这是一个错字)时发生的一切就是该方法接受class A类型的参数,因为它是{{ 1}}。所有参考类型均来自object

我认为你的问题实际上归结为“作为'运营商做了什么?”这行代码:

object

逻辑上转换为此伪代码:

A newA = a as A;

因此您可以看到'as'运算符将正确设置newA,因为参数的类型实际上是A类。如果您传递了另一个类型为A newA = null; if (a can be cast to type A) newA = a; 的对象,则as运算符将返回null(假设{{1没有派生自class B)。这是与as运算符上的示例的链接,这可能有助于更好地解释:

http://msdn.microsoft.com/en-us/library/cscsdfbt.aspx