
Преобразование типов.pptx
- Количество слайдов: 21
Преобразование типов
Введение • В C# тип определяется статически тип во время компиляции и после объявления переменной, она не может быть объявлена вновь или использоваться для хранения значений другого типа, если этот тип не преобразуется в тип переменной. • Например, невозможно преобразование из целого числа в произвольную строку. Поэтому после объявления переменной i как целочисленной, нельзя ей присвоить строку "Hello", как показано в следующем коде. int i; i = "Hello"; // Ошибка : "Невозможно неявным образом преобразовать тип 'string' для 'int' "
Введение • Но при разработке программ бывает необходимо скопировать значение в переменную или параметр метода другого типа. • Например, может быть целочисленная переменная, которую требуется передать методу, параметр которого имеет тип double. • Или может понадобиться присвоить переменную типа класса с переменной типа интерфейса. • Операции такого вида называются преобразованиями типов.
Виды преобразований • В C# можно выполнять следующие виды преобразований: – Неявные преобразования. – Явные преобразования (приведения). – Пользовательские преобразования. – Преобразования с помощью вспомогательных классов.
Неявные преобразования. • Не требуется никакого специального синтаксиса, поскольку преобразование безопасно для типов и данные не теряются. • Примерами могут служить преобразования от меньшего к большему целому типу, и преобразования из производных классов в базовые классы.
Явные преобразования (приведения). • Для явных преобразований необходим оператор приведения. • Приведение требуется, когда при преобразовании может быть потеряна информация, или когда преобразование может завершиться неудачей по другим причинам. • К типичным примерам относится числовое преобразование в тип, который имеет меньшую точность или меньший диапазон значений, а также преобразование экземпляра базового класса в производный класс.
Пользовательские преобразования. • Пользовательские преобразования выполняются специальными методами, которые можно определить для включения явных и неявных преобразований между пользовательскими типами, не имеющих отношения базовый класс — производный класс.
Преобразования с помощью вспомогательных классов. • Для преобразования между несовместимыми типами, например целые числа и объекты System. Date. Time, или шестнадцатеричные строки и байтовые массивы, можно использовать класс System. Bit. Converter, класс System. Convert и методы Parse встроенных числовых типов, таких как Int 32. Parse.
Неявные преобразования. • Для числовых типов неявное преобразование означает, что результирующий тип способен представлять все числа из интервала исходного типа. • Например, тип short может быть неявно преобразован в int, поскольку интервал значений типа short является подмножеством интервала int.
Иерархия преобразования типов
Неявное преобразование. Пример. sbyte v = 55; short v 2 = v; int v 3 = v 2; long v 4 = v 3;
Таблица неявных преобразований Исходный тип Целевой тип 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 char ushort , int, uint, long, ulong, float, double или decimal float double ulong float , double или decimal
Явные преобразования • Если преобразование не может быть выполнено без риска потери данных, для компилятора требуется, чтобы пользователь выполнил явное преобразование, которое называется приведением. • Приведение является способом явно указать компилятору, что нужно сделать преобразование, и что известно, что может быть потеря данных. • Для выполнения приведения надо заключить тип, в который производится приведение, в скобки перед преобразуемым значением или переменной. • Явное числовое преобразование используется для преобразования любого числового типа в любой другой числовой тип, для которого отсутствует неявное преобразование, с помощью выражения приведения.
Явное преобразование. Пример v 3 = (int) v 4; v 2 = (short) v 3; v = (sbyte) v 2;
Таблица явных преобразований Исходный тип Целевой тип sbyte , ushort, uint, ulong или char byte sbyte или char short sbyte , byte, ushort, uint, ulong или char ushort sbyte , byte, short или char int sbyte , byte, short, uint, ulongили char uint sbyte , byte, short, ushort, int или char
Таблица явных преобразований Исходный тип Целевой тип long sbyte , byte, short, ushort, int, ulong или char ulong sbyte , byte, short, ushort, int, uint, long или char sbyte , byte или short float sbyte , byte, short, ushort, int, uint, long, ulong, charили decimal double sbyte , byte, short, ushort, int, uint, long, ulong, char, floatили decimal sbyte , byte, short, ushort, int, uint, long, ulong, char, floatили double
Пользовательские преобразования. • C# позволяет разработчикам объявлять операции преобразования классов или структур, делая тем самым возможным преобразование одних классов и структур в другие, а также в базовые типы или из них. • Для задания преобразования используются операторы, называемые в соответствии с типом, к которому выполняется преобразование. • Преобразуемый аргумент или результат преобразования (но не оба из них) должны принадлежать к содержащему типу.
Пользовательские преобразования. • Операторы преобразования обладают следующими свойствами. – Преобразования, определенные как implicit, выполняются автоматически, если это требуется. – Для выполнения преобразований, определенных как explicit, требуется вызов операции приведения. – Все преобразования должны быть объявлены как static.
Пользовательские преобразования. • Ключевое слово implicit служит для объявления неявного оператора преобразования пользовательского типа. Этот оператор обеспечивает неявное преобразование между пользовательским типом и другим типом, если преобразовании исключается утрата данных.
Пользовательские преобразования. • Ключевое слово explicit служит для объявления оператора преобразования пользовательского типа, который следует вызывать во время приведения.
Преобразование типов.pptx