例如,让我们考虑以下示例。
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
}
有人可以帮我理解这一点。链接参考解释?
由于
答案 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运算符上的示例的链接,这可能有助于更好地解释: