Все ли приведения в C# приводят к боксированию/небоксированию

Мне интересно узнать, все ли приведения в C# приводят к боксированию, и если нет, то все ли приведения являются дорогостоящей операцией?

Пример взят из Boxing and Unboxing (C# Programming Guide)

    int i = 123;
    // The following line boxes i.
    object o = i;  

Эта строка явно вызывает боксирование (обертывание типа int в объект). Эта операция считается дорогостоящей, поскольку она создает мусор, который будет собираться.

А как насчет приведения из двух разных типов ссылочных типов? Какова стоимость этого? Можно ли ее правильно измерить? (по сравнению с предыдущим примером)

Например:

public class A
{
}

public class B : A
{
}

var obj = new B();
var obj2 = (A)obj; // is this an "expensive" operation? this is not boxing

11
задан lysergic-acid 20 February 2012 в 18:15
поделиться