[英]C# Why does passing of an class instance to a method which accepts object as parameter and boxing it back work
例如,讓我們考慮以下示例。
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
}
有人可以幫我理解這一點。 鏈接參考解釋?
謝謝
我沒有看到任何拳擊正在進行。 拳擊是指將值類型(例如int)轉換為引用類型。 在您的示例中,傳遞給方法的值是引用類型( class A
)。 拳擊鏈接:
http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx
所以當你調用Method
(或MethodCalled
,我認為這是一個錯字)時發生的一切就是該方法接受class A
的參數,因為它是一個object
。 所有引用類型都來自object
。
我認為你的問題實際上歸結為“作為'運營商做了什么?” 這行代碼:
A newA = a as A;
邏輯上轉換為這個偽代碼:
A newA = null;
if (a can be cast to type A)
newA = a;
因此,您可以看到'as'運算符將正確設置newA,因為參數的類型實際上是類A.如果您傳遞了class B
類型的另一個對象,則as運算符將返回null(假設class B
不是從class A
派生class A
)。 這是一個帶有as運算符的示例的鏈接,這可能有助於解釋一下:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.