ホームページ >バックエンド開発 >C#.Net チュートリアル >C#学習日記16---暗黙的変換の具体的な使用例

C#学習日記16---暗黙的変換の具体的な使用例

黄舟
黄舟オリジナル
2017-01-21 15:02:091738ブラウズ

C# の基本的なデータ型を学習したら、いよいよ C# の型間の相互変換について学びましょう。

暗黙的な変換:

using ' ' s ' s ' s ' ir ' ' ' ' ' 絵 ' ' ' ' ' ">暗黙的な変換プロセス中、コンパイラは変換をチェックせずに安全に変換を実行できます。たとえば、int 型から long 型への変換は暗黙的な変換です。暗黙的な変換は通常失敗せず、変換プロセス中に情報が失われることはありません。例: int i = 100; // 宣言なしで int 型を long 型に自動的に変換します。

暗黙的な変換は行われません。たとえば、上記の long 型を int 型に暗黙的に変換すると、成功しません。 use using using using use using using using ‐ ‐ ‐ したがって、暗黙的な変換には次のルールがあります。

暗黙的な数値変換

暗黙的な列挙型変換

    暗黙的な参照変換
  • 暗黙的な数値変換:
  • 暗黙的な数値変換には次のタイプが含まれます。
  • Sバイト型からショートへ、int、long、float、double、10進数型へ
  • byte型からshort、ushort、int、uint、long、ulong、float、double、10進数型へ

    short型からint、long 、 flaot、double、10 進数型
  • ushort 型から int、uint、long、ulong、double、10 進数型へ
  • int 型から long、flaot、double、10 進数型へ
  • uint型からlong、ulong、flaot、double、10進数型へ;
  • long型からfloat、double、10進数型へ
  • ulong型からfloat、double、10進数型へ;
  • char型からushort、int、uint、long、ulong、flaot、double、decim型へ

  • まとめると、一言で言えば、低金利からの転換です。 - 精度型から高精度型への変換 (精度とデータ情報は失われないため) ですが、高精度型から低精度型への暗黙的な変換はできません (部分的な情報が失われる可能性があり、安全ではありません)。型の精度や範囲についてはC#学習日記04を参照してください。ここで注意すべき点は、他の型から Char 型への暗黙的な変換は行われないということです。
  • 暗黙的な数値変換の例:
  • using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
      
    namespace Test  
    {    
        class Program  
        {  
            static void Main(string[] args)  
            {  
                byte x = 255;      //byte 表示的范围0~255  
                short y = x;      //将从byte到short隐式转换  
                y++;  
                Console.WriteLine("y = {0}",y);  
      
                y = 32767; //shot的范围 -32768~32767  
      
                int i = y + 5;  //从 short 到 int 隐式转换扩大范围 结果是准确的  
                y+=5;          //超出范围了结果会不准确  
                Console.WriteLine("y = {0}",y); //y超出范围数据会丢失部分  
                  
                Console.WriteLine("i = {0}",i);   
      
                  
            }  
        }  
    }

    結果:

  • この例から、タイムリーな型変換が依然として非常に重要であることがわかります。
  • 暗黙的な列挙型変換:
暗黙的な列挙型変換では、10 進数の 0 を任意の列挙型に変換できます。変換できるのは 0 のみであることに注意してください。他の整数にはそのような暗黙的な変換はありません。出力結果は次のとおりです:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{    
    class Program  
    {  
        enum weekday  //定义一个枚举类型  
        { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };  
        static void Main(string[] args)  
        {  
            weekday day;  
            day = 0;      //隐式将0转换为枚举类型(只能是0)  
            Console.WriteLine(day);  
              
        }  
    }  
}

上記のコードで、day = 0 を day = 1 に変更すると、コンパイラはエラーを返します。

暗黙的な参照変換:

C#学習日記16---暗黙的変換の具体的な使用例任意の参照型からオブジェクト型への変換

(Person p = new Person())

クラス型 s からクラス型 t への変換 (s は a) t の派生クラス;

  Sunday

クラス型 s からインターフェイス型 t への変換 (クラス s はインターフェイス t を実装します) (インターフェイス (インターフェイス) に関する内容は後で書きます。定義メソッドではなくメソッドを宣言するためにのみ使用します) )

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class person     //定义了一个基类(父类) person  
    {   
    }  
    class person1 : person   // person1 派生于基类person,person1就叫person的一个子类,  
    {   
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            person1 per = new person1();  //将子类person1实例化一个对象per  
            person Per = per;        //将子类隐式转换为父类  
              
              
        }  
    }  
}

インターフェイス型 s からインターフェイス型 t への変換 (t は s の親インターフェイスです);

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    public interface Infa   //定义了一个接口  
    {  
        void Output();  
    }  
    class person : Infa    //定义一个person类继承于接口并实现方法  
    {  
        public void Output()  
        {  
            Console.WriteLine("Welcome");  
        }  
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            person per = new person();  //实例化  
  
            Infa fa = per;    //从person到interface(接口)隐式转换  
              
        }  
    }  
}

参照型配列 s から参照型配列 t への変換 (s は t の派生クラス)、および配列次元 数値は同じです。

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    public interface Infa   //定义了一个接口  
    {  
        void Output();  //接口只声明方法,具体实现由它的派生类写代码决定  
    }  
    public interface infa1 : Infa    //定义一个infa1接口继承于Infa接口  
    {  
        void input();  
    }  
    class person1 : infa1  //由infa1派生一个person1类,因为接口不能直接实例化  
    {   
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            person1 per = new person1 { };  //接口不能直接实例化,需要实例化一个派生于infa1接口person1类  
  
            Infa fa = per;    //实现子接口到父借口隐式转换  
              
        }  
    }  
}

参照型配列が値型配列の場合、次のコードはエラーを報告することに注意してください。

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class Person //定义一个基类 Person   
    {   
    }  
    class person1 : Person  //由基类派生一个子类person1  
    {   
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            person1[] per = new person1[5];  //实例化一个person1  
  
           Person[] Per = per;    //实现隐式转换  
              
        }  
    }  
}
    配列型から System.Array への変換 (配列はすべての配列の基本クラス参照 前の記事^_^)
  • class Program  
        {  
            static void Main(string[] args)  
            {  
                int[] n_int = new int[10];  
                double[] n_doubel = new double[10];  
                n_doubel = n_int;  //这里报错啦  
                  
            }  
        }

    任意の代表型から System.Delegate への変換 (デリゲートについては後で書きます)

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
      
    namespace Test  
    {  
        class Program  
        {  
            public static int output(int s)  //定义一个方法  
            {  
                Console.WriteLine("welcome,{0}",s);  
                return 1;  
            }  
      
            public delegate int mydel(int s);  //声明一个委托(以后我会说到委托)  
              
            static void Main(string[] args)  
            {  
                mydel my = new mydel(output);   //将 output方法委托给my  
                Delegate MYDEL = my;    //向 MYDEL 隐式转换  
            }  
        }  
    }

    以上就是 C#学习日记16----隐式转换具体用例的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。