Неявные преобразования числовых типов.
Неявное преобразование при использовании оператора присваивания.
Неявные преобразования.
При вызове члена функции (метода). Для параметра имеющего тип значения вычисляется выражение аргумента и выполняется неявное преобразование в соответствующий тип параметра. Пример.
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;
}
}
}