Когда данные одного типа присваиваются переменной другого типа, неявное преобразование типов происходит автоматически при следующих условиях:
Если оба эти условия удовлетворяются, то происходит расширяющее преобразование. Например, тип int
достаточно крупный, чтобы вмещать в себя все действительные значения типа byte
, а кроме того, оба типа, int
и byte
, являются совместимыми целочисленными типами, и поэтому для них вполне возможно неявное преобразование.
Числовые типы как целочисленные, так и с плавающей точкой, вполне совместимы друг с другом для выполнения расширяющих преобразований. Так, приведенная ниже программа составлена совершенно правильно, поскольку преобразование типа long
в тип double
является расширяющим и выполняется автоматически.
// Продемонстрировать неявное преобразование типа long в тип double.
using System;
class LtoD {
static void Main() {
long L;
double D;
L = 100123285L;
D = L;
Console.WriteLine("L и D: " + L + " " + D);
}
}
Если тип long
может быть преобразован в тип double
неявно, то обратное преобразование типа double
в тип long
неявным образом невозможно, поскольку оно не является расширяющим. Следовательно, приведенный ниже вариант предыдущей программы составлен неправильно.
// *** Эта программа не может быть скомпилирована. ***
using System;
class LtoD {
static void Main() {
long L;
double D;
D = 100123285.0;
L = D; // Недопустимо!!!
Console.WriteLine("L и D:- " + L + " " + D);
}
}
Помимо упомянутых выше ограничений, не допускается неявное взаимное преобразование типов decimal
и float
или double
, а также числовых типов и char
или bool
. Кроме того, типы char
и bool
несовместимы друг с другом.
Преобразование и приведение типов | Приведение несовместимых типов |