Heim  >  Artikel  >  Backend-Entwicklung  >  C#-Lerntagebuch 17 – Zeigen Sie spezifische Anwendungsfälle der Typkonvertierung an

C#-Lerntagebuch 17 – Zeigen Sie spezifische Anwendungsfälle der Typkonvertierung an

黄舟
黄舟Original
2017-01-21 15:07:061551Durchsuche

Bei der Typkonvertierung von C# gibt es zusätzlich zur im vorherigen Artikel eingeführten impliziten Typkonvertierung auch eine Typkonvertierung, die deklariert werden muss ----- explizite Typkonvertierung

Anzeige Typkonvertierung, auch erzwungene Typkonvertierung genannt, erfordert, dass wir bei der Konvertierung den Konvertierungstyp explizit angeben. Wenn wir beispielsweise den Long-Typ in den Int-Typ konvertieren, wird das System dies nicht tun, da es sich bei dieser Konvertierung um eine Konvertierung handelt, die an Präzision verliert Führen Sie automatisch eine implizite Konvertierung durch. Daher ist eine erzwungene Konvertierung erforderlich:

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

Die Konvertierung des Anzeigetyps gilt nicht für zwei Typen, z. B.:

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

Daher der Anzeigetyp Für die Konvertierung gelten auch bestimmte Regeln:

  • zeigt die numerische Konvertierung an;

  • zeigt die Aufzählungskonvertierung an; > Zeigt die Referenzkonvertierung an ;

  • Die Anzeigekonvertierung ist nicht immer erfolgreich und kann häufig zum Verlust von Informationen führen (da die Typen unterschiedlich sind, sind auch der Bereich und die Genauigkeit unterschiedlich. Einzelheiten finden Sie unter Bitte beachten Sie den Datentyp. Die Anzeigekonvertierung umfasst alle impliziten Konvertierungen. Daher kann die implizite Konvertierung auch in Form einer expliziten Konvertierung geschrieben werden, z. B.:

Numerische Konvertierung anzeigen:

Die numerische Konvertierung der Anzeige bezieht sich auf die Beziehung zwischen Werttyp und Werttyp. Konvertierung zwischen sbyte, char-Typ
        int i = 6000;
                            long l = (long)i;    //等价于 long l = i;

von short zu sbyte, byte, ushort, uint, ulong, char-Typ; 🎜>

  • von ushort nach sbyte, byte, short, char type;

  • von int nach sbyte, byte, short, ushort, uint, ulong, char-Typ;

  • von uint nach sbyte, byte, short, ushort, int, char-Typ

  • von long nach sbyte, byte, short, ushort, int, uint, ulong, char type; >

    Von char zu sbyte, byte, short type ;
  • Von float zu sbyte, byte, short, ushort, int, uint, long, ulong, char, Dezimaltyp;
  • Von double bis sbyte, byte, short, ushort, int, uint, long, ulong, float, char, dezimaltyp;
  • von decimal zu sbyte, byte, short, ushort, int, uint, long, ulong, float, char, double typen;
  • Nachdem wir so viel geschrieben haben, fassen wir es zusammen. Es handelt sich um die Konvertierung von hoher Präzision in niedrige Präzision. Es kann sich um eine Retention-Konvertierung oder um eine Rundungskonvertierung handeln. Schreiben Sie ein Beispiel:
  • Laufende Ergebnisse:
  • Der Vergleich ergab, dass, wenn der doppelte Datenbereich über den gültigen Wertebereich von Float hinausgeht, die 9. Ziffer bei der Anzeigekonvertierung gerundet wird und nur der ganzzahlige Teil beibehalten wird bei Konvertierung in den Typ int.
  • Konvertierung der Anzeigeaufzählung:
  • Die Konvertierung der Anzeigeaufzählung umfasst die folgenden Inhalte:

Von sbyte, byte, short, ushort , int, uint, long, ulong, float, char, double, decimal Typen zu jedem Aufzählungstyp;

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);  
              
        }  
    }  
}

Von jedem Aufzählungstyp zu sbyte, byte, short, ushort, int, uint , Long, Ulong, Float, Char, Double, Dezimaltypen;


von jedem Aufzählungstyp zu jedem anderen Aufzählungstyp

C#-Lerntagebuch 17 – Zeigen Sie spezifische Anwendungsfälle der Typkonvertierung an

Schreiben Sie eine Beispiel:

Laufendes Ergebnis:

    Referenzkonvertierung anzeigen:
  • Von Objekt zu irgendetwas Referenztypkonvertierung;

  • Konvertierung vom Klassentyp s in den Klassentyp t, wobei s die Basisklasse von t ist;
  • Konvertierung vom Klassentyp s in die Schnittstelle t Konvertierung, wobei s kein versiegelter Typ ist Klasse und implementiert t; nicht (der Inhalt der Schnittstelle wird später geschrieben, sie deklariert nur Methoden, definiert aber keine Methoden)
  • mit System;

    mit System.Collections .Generic;

    using System.Linq;
  • using System.Text;

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);  
              
        }  
    }  
}

Konvertierung vom Schnittstellentyp s in den Klassentyp t, wobei t keine versiegelte Klasse ist und nicht implementiert wird s;

C#-Lerntagebuch 17 – Zeigen Sie spezifische Anwendungsfälle der Typkonvertierung anKonvertierung vom Schnittstellentyp s in den Schnittstellentyp t, wobei s keine Unterschnittstelle von t ist;

Referenztyp-Array und Referenztyp-Array Anzeigekonvertierung , die beide die Beziehung zwischen Elternklasse und Unterklasse darstellen (die Dimensionen müssen gleich sein)

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类  
              
        }  
    }  
}
Es funktioniert nicht, wenn Sie es in das folgende Array ändern

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;  //将父类转换为子类  
              
        }  
    }  
}
Von System.Array zum Array-Typ (Array ist die Basisklasse aller Array-Typen)

Von System.Delegate zum repräsentativen (delegaten) Typ


Das Obige ist C# Learning Diary 17--- Zeigt den Inhalt spezifischer Anwendungsfälle für die Typkonvertierung an. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

namespace Test
{  
    class Program
    {
        public interface teacher  //定义一个接口 
        { }
        class student   //定义一个类
        { }
        static void Main(string[] args)
        {
            student stu = new student(); //实例化一个对象
            teacher tea = (teacher)stu;  // 显示转换
                        
        }
    }
}
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn