Преобразования упаковки
Пример
Неявные преобразования ссылочных типов
Существуют следующие неявные преобразования ссылочных типов:
Из любого ссылочного типа к object.
Из производного класса к базовому классу.
Из типа класса S к типу интерфейса T (где S реализует T).
Из типа интерфейса S к типу интерфейса T (где S является производным от T).
Из любого типа массива к System.Array и реализуемым им интерфейсам.
Из типа_массива S, который имеет тип элементов SE, к типу_ массива T, который имеет тип элементов TE, если выполняются следующие условия:
S и T различаются только по типу элементов. Другими словами, типы S и T имеют одинаковое число измерений.
SE и TE являются ссылочными_типами.
Существует неявное преобразование ссылочного типа из SE к TE.
Пример
using System;
namespace ConsoleApplication5
{
class Program
{
static void Main()
{
string[] t = new string[2] { "vv", "kkk" };
object[] tt = new object[2];
tt = t;
}
}
}
Если элемент массива ссылочного типа передается в качестве параметра ссылки или вывода, во время выполнения необходимо убедиться, что фактический тип элементов массива идентичен типу параметра.
using System;
namespace ConsoleApplication5
{
class Program
{
static void F(ref object x) { }
static void Main()
{
object[] a = new object[10];
object[] b = new string[10];
F(ref a[0]); // Ok
F(ref b[1]); // ArrayTypeMismatchException
}
}
}
Понятие упаковки и распаковки является ключевым в системе типов C#. С помощью данных операций осуществляется связь между типами значений и ссылочными типами за счет возможности преобразования любого значения типа значений к типу object и обратно.
Преобразование упаковки обеспечивает неявное преобразование типа значений в ссылочный тип.
из любого типа значений к типу object. Пример.
int i = 123;
object box = i;