C # Почему передача экземпляра класса в метод, который принимает объект в качестве параметра и возвращает его обратно работает - PullRequest
1 голос
/ 06 сентября 2011

Например, рассмотрим следующий пример.

 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 Ответ

4 голосов
/ 06 сентября 2011

Я не вижу никакого бокса.Бокс - это когда тип значения (например, 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

...