Изменения документа Преобразование типов
Редактировал(а) Alexandr Fokin 2023/06/26 11:34
От версии 1.2
отредактировано Alexandr Fokin
на 2023/02/25 13:07
на 2023/02/25 13:07
Изменить комментарий:
К данной версии нет комментариев
К версии 1.10
отредактировано Alexandr Fokin
на 2023/02/25 13:23
на 2023/02/25 13:23
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,41 +1,42 @@ 1 1 |(% style="width:138px" %)AS|(% style="width:869px" %)Выполняет попытку приведения к родительскому или дочернему типу (относительно типа переменной) интерфейсному типу. 2 -В случае неудачи возвращает null, не выбрасывает ошибку|(% style="width:440px" %){{code language="c#"}}parentType p1 = childVar as parentType; 3 -interfaceType p2 = instanceVar as interfaceType;{{/code}} 2 +В случае неудачи возвращает null, не выбрасывает ошибку|(% style="width:440px" %){{code language="c#"}}ParentType p1 = ChildVar as ParentType; 3 +InterfaceType p2 = instanceVar as InterfaceType; 4 +p1 as ChildType{{/code}} 4 4 |(% style="width:138px" %)IS|(% style="width:869px" %)Проверяет является ли сущность определенным типом. 5 -true/false.|(% style="width:440px" %){{code language="c#"}}bool p1 = childVar is parentType;6 -bool p2 = instanceVar is interfaceType;6 +true/false.|(% style="width:440px" %){{code language="c#"}}bool p1 = childVar is ParentType; 7 +bool p2 = instanceVar is InterfaceType; 7 7 8 -if (instanceVar is interfaceType interfaceTypeVar)9 +if (instanceVar is InterfaceType interfaceTypeVar) 9 9 { 10 10 interfaceTypeVar.InterfaceMethod(); 11 11 }{{/code}} 12 -|(% style="width:138px" %)Upcasting and Dowcasting|(% style="width:869px" %)Также как и AS выполняет попытку приведения к типу, но в случае ошибки бросает Exception.|(% style="width:440px" %){{code language="none"}}parentType p1 = (parentType)childVar; 13 -interfaceType p2 = (interfaceType)instanceVar;{{/code}} 13 +|(% style="width:138px" %)Upcasting and Dowcasting|(% style="width:869px" %)Также как и AS выполняет попытку приведения к типу, но в случае ошибки бросает Exception.|(% style="width:440px" %){{code language="none"}}ParentType p1 = (ParentType)childVar; 14 +InterfaceType p2 = (InterfaceType)instanceVar; 15 +(ChildType)p1;{{/code}} 14 14 |(% style="width:138px" %)implicit and explicit operator|(% style="width:869px" %)((( 15 15 Механизм который при вызове может выглядеть словно (Upcasting and Dowcasting), но на самом деле выполняющий преобразование одного типа в другой (подразумевает логику создания экземпляра целевого типа и наполнение его данными на основе переданной сущности). 16 16 В теле класса может быть определен метод как преобразование экземпляров класса в экземпляры внешнего типа, так и экземпляр внешнего типа в экземпляр класса. 17 17 \\Имеет определенные ограничения: например не позволяет указывать преобразования дочернего типа к родительскому иначе бы приводил к неоднозначности. 18 18 19 -В н екоторых случаях лучше явно реализовать модуль преобразования в виде компонента бизнес логики, а не использовать данных механизм.21 +Во многих случаях лучше явно реализовать модуль преобразования в виде отдельного компонента бизнес логики (Converter / Transformator), а не использовать данных механизм. Механизм больше подходит для преобразования базовых или примитивных типов (Например наличие в проекте собственного специализированного числового типа данных, которые преобразуется в некоторые стандартные типы). 20 20 )))|(% style="width:440px" %){{code language="c#"}}class MyClass1 21 21 { 22 22 public static implicit operator Type1 (MyClass1 instance) 23 - { / /... }25 + { /*...*/ } 24 24 } 25 25 class MyClass2 26 26 { 27 27 public static explicit operator Type1 (MyClass2 instance) 28 - { / /... }30 + { /*...*/ } 29 29 } 30 30 31 -static void Action(Type1 param){ / /... }33 +static void Action(Type1 param){ /*...*/ } 32 32 33 33 MyClass1 myClass1Var; 34 34 MyClass2 myClass2Var; 35 35 36 36 Action(myClass1Var); //implicit 37 -Action((Type1)myClass1Var); //explicit 38 -{{/code}} 39 +Action((Type1)myClass1Var); //explicit{{/code}} 39 39 |(% style="width:138px" %)Ограничения для Generic типов|(% style="width:869px" %) |(% style="width:440px" %){{code language="c#"}}interface Logic1 40 40 { 41 41 //В случае struct приведет к упаковке ... ... @@ -49,5 +49,3 @@ 49 49 void Method1<T>(T param) 50 50 where T : ParameterInterfaceType 51 51 }{{/code}} 52 - 53 -