Я не вижу никакого бокса.Бокс - это когда тип значения (например, 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, поскольку тип параметра равенфактически класс А. Если вы передадите другой объект типа class B
, оператор as вернет значение null (при условии, что class B
не получено из class A
).Вот ссылка с примером на оператор as, которая может помочь объяснить немного лучше:
http://msdn.microsoft.com/en-us/library/cscsdfbt.aspx