Преобразования упаковки

Пример

Неявные преобразования ссылочных типов

Существуют следующие неявные преобразования ссылочных типов:

Из любого ссылочного типа к 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;