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

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

Неявное преобразование при использовании оператора присваивания.

Неявные преобразования.

При вызове члена функции (метода). Для параметра имеющего тип значения вычисляется выражение аргумента и выполняется неявное преобразование в соответствующий тип параметра. Пример.

using System;

namespace ConsoleApplication5

{

class Program

{

static double f(double a, double b)

{

return a + b;

}

static void Main(string[] args)

{

int r = 2222;

double rez = f(r, 42222);

Console.WriteLine(rez);

}

}

}

Пример. Неявное преобразованиечислового типа: из int к long. Компилятор неявно преобразует значение справа в тип long перед присвоением его переменной bigNum. Преобразование от меньшего к большему целому типу.

using System;

namespace ConsoleApplication5

{

class Program

{

static void Main(string[] args)

{

int num = 2147483647;

long bigNum = num;

}

}

}

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

· из sbyte к short, int, long, float, double или decimal;

· из byte к short, ushort, int, uint, long, ulong, float, double или decimal;

· из short к int, long, float, double или decimal;

· из ushort к int, uint, long, ulong, float, double или decimal;

· из int к long, float, double или decimal;

· из uint к long, ulong, float, double или decimal;

· из long к float, double или decimal;

· из ulong к float, double или decimal;

· из char к ushort, int, uint, long, ulong, float, double или decimal;

· из float к double.

Преобразования из типов int, uint, long или ulong к float, а также из long или ulong к double могут привести к потере точности, но не величины. Другие неявные преобразования числовых типов никогда не приводят к потере данных.

Неявных преобразований к типу char не существует, поэтому значения любых других целых типов не могут быть преобразованы к типу char.

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

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

}

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: