Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Автоматическое преобразование типов C# Полное руководство Герберт Шилдт

Автоматическое преобразование типов C# Полное руководство Герберт Шилдт

Когда данные одного типа присваиваются переменной другого типа, неявное преобразование типов происходит автоматически при следующих условиях:
 - оба типа совместимы;
 - диапазон представления чисел целевого типа шире, чем у исходного типа.
Если оба этих условия удовлетворяются, то происходит расширяющее преобразование. Например, тип 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: 11 + L + 11 11 + 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: 11 + L + 11 11 + D) ;
}
}

Помимо упомянутых выше ограничений, не допускается неявное взаимное преобразование типов decimal и float или double, а также числовых типов и char или bool. Кроме того, типы char и bool несовместимы друг с другом.