Maison  >  Article  >  développement back-end  >  Journal d'apprentissage C# 17 --- Afficher des cas d'utilisation spécifiques de conversion de type

Journal d'apprentissage C# 17 --- Afficher des cas d'utilisation spécifiques de conversion de type

黄舟
黄舟original
2017-01-21 15:07:061591parcourir

Dans la conversion de type de C#, en plus de la conversion de type implicite introduite dans l'article précédent, il existe également une conversion de type qui doit être déclarée -----conversion de type explicite.

Explicite conversion de type, également appelée conversion de type forcée, nous oblige à spécifier explicitement le type de conversion lors de la conversion. Par exemple, lorsque nous convertissons le type long en type int, puisque cette conversion est une conversion qui perd en précision, le système ne le fera pas. effectue automatiquement une conversion implicite de formule, une conversion forcée est donc requise :

      long l = 6000;
                  int i = (int)l;    //需要用在 ()里面声明转换类型

La conversion du type d'affichage n'est pas vraie pour deux types, tels que :

       int i = 6000;
                  string i = (string)i;    //这里会报错

Par conséquent, le type d'affichage la conversion a également certaines règles de :

  • affiche la conversion numérique ;

  • affiche la conversion d'énumération ; > affiche la conversion de référence ;

  • La conversion d'affichage n'est pas toujours réussie, et peut souvent entraîner la perte d'informations (car les types sont différents, la plage et la précision sont également différentes. Pour plus de détails, veuillez vous référer au type de données). La conversion d'affichage inclut toutes les conversions implicites, donc la conversion implicite peut également être écrite sous la forme de conversion explicite, telle que :

Conversion numérique d'affichage :

Afficher la conversion numérique fait référence à la relation entre le type de valeur et le type de valeur. Conversion entre sbyte, type char
        int i = 6000;
                            long l = (long)i;    //等价于 long l = i;

de short à sbyte, byte, ushort, uint, ulong, type char

  • de ushort à sbyte, byte, short, char type

  • de int à sbyte, byte, short, ushort, uint, ulong, type de caractère ;

  • de uint à sbyte, octet, short, ushort, int, type de caractère

  • de long à sbyte, octet, short, ushort, int, uint, ulong, char type ;

  • De ulong à sbyte, byte, short, ushort, int, uint, long, char type ; >

    De char à sbyte, byte, short type ;
  • De float à sbyte, byte, short, ushort, int, uint, long, ulong, char, type décimal ;
  • De double à sbyte, octet, court, ushort, int, uint, long, ulong, float, char, type décimal ;
  • de décimal à sbyte, byte, short, ushort, int, uint, long, ulong, float, char, double types
  • Après avoir tant écrit, résumons-le. Il s'agit de la conversion de haute précision en faible précision. Il peut s'agir d'une conversion de rétention ou d'une conversion d'arrondi, écrivez un exemple :
  • Résultats en cours :
  • La comparaison a révélé que lorsque la double plage de données dépasse la plage de valeurs valide de float, le 9ème chiffre est arrondi lors de la conversion d'affichage et seule la partie entière est conservée une fois converti en type int.
  • Conversion de l'énumération d'affichage :
La conversion de l'énumération d'affichage comprend le contenu suivant :

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{    
    class Program  
    {  
        static void Main(string[] args)  
        {  
            double n_double = 1.73456789;  
            float n_float = (float)n_double;  //显示转换 float的有效为只有8位(.也是一位)所以从第9位四舍五入  
  
            int n_int = (int)n_double; //只保留整数  
  
            Console.WriteLine("n_float = {0}\nn_int = {1}",n_float,n_int);  
              
        }  
    }  
}

De sbyte, byte, short, ushort , int, uint, long, ulong, float, char, double, decimal types à n'importe quel type d'énumération


de n'importe quel type d'énumération à sbyte, byte, short, ushort, int, uint ; , types long, ulong, float, char, double, décimal

Journal dapprentissage C# 17 --- Afficher des cas dutilisation spécifiques de conversion de type

de n'importe quel type d'énumération à tout autre type d'énumération

Écrivez un exemple :

Résultat d'exécution :
  • Afficher la conversion de référence :
  • De l'objet à n'importe quoi Conversion de type de référence

  • Conversion du type de classe s en type de classe t, où s est la classe de base de t;

  • Conversion du type de classe s en interface t Conversion, où s n'est pas une classe scellée. class et n'implémente pas t; (le contenu sur l'interface sera écrit plus tard, il déclare uniquement les méthodes mais ne définit pas les méthodes)

using System;

using System.Collections .Generic;
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{    
    class Program  
    {  
        enum weekday   //定义2个枚举  
        {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday }  
        enum Month  
        {Janurary=1,February,March,April,May,Jun,July }  
        static void Main(string[] args)  
        {  
            int n_int = 2;  
            double n_double = 3.0;  
            decimal n_decimal = 5m;  //声明decimal 类型要加m  
  
            weekday weki = (weekday)n_int;     //从int、double、decimal到枚举转换  
            weekday wekd = (weekday)n_double;  
            weekday wekde = (weekday)n_decimal;  
  
            weekday wek = weekday.Tuesday;   //枚举类型之间的转换  
            Month mon = (Month)wek;  
  
            int i = (int)wek;  //从枚举类型到int的转换  
            int t = (int)mon;  
            Console.WriteLine("n_int = {0}\nn_double = {1}\nn_decimal = {2}",weki,wekd,wekde);  
            Console.WriteLine("wek = {0}\nmon = {1}\nwek ={2}\tmon = {3}",wek,mon,i,t);  
              
        }  
    }  
}
using System.Linq;

using System.Text;

Journal dapprentissage C# 17 --- Afficher des cas dutilisation spécifiques de conversion de type

Conversion du type d'interface s en type de classe t, où t n'est pas une classe scellée et n'implémente pas s;

Conversion du type d'interface s en type d'interface t, où s n'est pas une sous-interface de t;
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{    
    class Program  
    {  
        //定义2个类 teacher与man  
        class teacher  
        { }  
        class man  
        { }  
        static void Main(string[] args)  
        {  
            man per = new man();  //将man实例化一个对象per  
            object o = per;      //装箱  
            teacher p = (teacher)o;  // 将o显示转换为teacher类  
              
        }  
    }  
}

Tableau de type référence et tableau de type référence Conversion d'affichage , qui sont tous deux la relation entre la classe parent et la sous-classe (les dimensions doivent être les mêmes)
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{    
    class Program  
    {  
        class man   //定义一个基类  
        { }  
        class student:man  //student继承man  
        { }  
        static void Main(string[] args)  
        {  
            man per = new man();  //man实例化一个对象per  
            student stu = (student)per;  //将父类转换为子类  
              
        }  
    }  
}

Cela ne fonctionnera pas si vous le remplacez par le tableau suivant



De System.Array Au type de tableau (le tableau est la classe de base de tous les types de tableaux)


De System.Delegate au type représentatif (délégué)

namespace Test
{  
    class Program
    {
        public interface teacher  //定义一个接口 
        { }
        class student   //定义一个类
        { }
        static void Main(string[] args)
        {
            student stu = new student(); //实例化一个对象
            teacher tea = (teacher)stu;  // 显示转换
                        
        }
    }
}

Ce qui précède est C# Learning Diary 17 --- Affiche le contenu de cas d'utilisation spécifiques pour la conversion de type. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{    
    class Program  
    {  
        public interface man  //定义一个接口   
        { }  
        class teacher:man  //定义一个继承于man的类man  
        { }  
        class student   //定义一个新类  
        { }  
        static void Main(string[] args)  
        {  
            man teac=new teacher(); //间接实例化一个接口  
            student stu = (student)teac;  // 显示转换  
                          
        }  
    }  
}

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn