ホームページ >バックエンド開発 >C#.Net チュートリアル >C#学習日記16---暗黙的変換の具体的な使用例
C# の基本的なデータ型を学習したら、いよいよ C# の型間の相互変換について学びましょう。
暗黙的な変換:
using ' ' s ' s ' s ' ir ' ' ' ' ' 絵 ' ' ' ' ' ">暗黙的な変換プロセス中、コンパイラは変換をチェックせずに安全に変換を実行できます。たとえば、int 型から long 型への変換は暗黙的な変換です。暗黙的な変換は通常失敗せず、変換プロセス中に情報が失われることはありません。例: int i = 100; // 宣言なしで int 型を long 型に自動的に変換します。
暗黙的な変換は行われません。たとえば、上記の long 型を int 型に暗黙的に変換すると、成功しません。 use using using using use using using using ‐ ‐ ‐ したがって、暗黙的な変換には次のルールがあります。
暗黙的な数値変換
暗黙的な列挙型変換
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); } } }
結果:
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 に変更すると、コンパイラはエラーを返します。 暗黙的な参照変換:
任意の参照型からオブジェクト型への変換
(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; //实现隐式转换 } } }
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)!