C#グラフィックチュートリアルの研究ノート - 変換

まず、変換何
の変換(変換)型の値を受け取り、プロセスの他の種類の相当値として使用します。変換値のソースと値は同じであるが、ターゲット・タイプのタイプべきです。

 

第二に、明示的および暗黙的な変換の変換(キャスト)
1.暗黙の変換
(1)自動変換言語を行います。
(2)データまたは精度を失うことなく、一般的に短い長さタイプ型に変換されます。
(2)余分な充填0または1を使用する必要のあるターゲット・タイプへのソース・タイプからのビット数より少ないビット以上、特定のビット。
変換の署名されたタイプの、追加の、より小さな符号無し型はより大きな符号無し型に変換されるとき、すべての余分なパディング0の最も高い目標を入力し、これを(ゼロ拡張)ゼロ拡張と呼ばれていますこれは、符号拡張(符号拡張)と呼ばれるシンボルビット源の高発現が充填されています。これは、変換の値とサイズの正しい符号を維持します。
2.明示的な変換(キャスト)
短い長型タイプを変換するために必要な場合、明示的な変換(キャスト)式を使用する必要があり、データを失うことなくターゲットソース値のタイプを提供することができません。
構文:

前記オーバーフロー検出コンテキスト
コード断片は、オーバーフロー検出チェックコンテキストと呼ばれている場合。デフォルトのコンテキストは、オーバーフローの検出をチェックされません。
明示的な変換データが失われる可能性があり、ターゲットソース値で同じ型を表すことができません。整数型の場合、C#がランタイム検出結果オーバーフロー時変換を入力するか否かを選択する能力を提供してくれます。これは、事業者がチェックして文を確認することによって実現されます。
我々がチェックされている表現やコードの一部を指定した場合、CLRは、OverflowExceptionが変換が異常オーバーフローを生成スローされます。あなたがチェックされている指定しない場合、変換はかどうかに関係なく、オーバーフローの続行されます。
(1)チェックし、未チェックのオペレータが
オーバーフロー検出演算子コンテキスト制御発現についてチェックし、チェックされません。(発現方法ができません)
例:

(2)チェックし、未チェックの文は
チェックされ、コードブロックを変換するすべての文を制御するためのチェックを外します。
例:

 

三、引用转换
引用类型对象由引用和数据两部分组成,引用转换接受源引用并返回一个指向堆中同一位置的引用,但是把引用“标记”为其他类型。
1. 隐式引用转换
(1)所有引用类型都可以被隐式转换为object类型。
(2)任何类型都可以隐式转换到它继承的接口。
(3)类可以隐式转换到:它继承链中的任何类、它实现的任何接口。
2. 显式引用转换
显式引用转换是从一个普通类型到一个更精确类型的引用转换。
显式引用转换包括:
(1)从object到任何引用类型的转换。
(2)从父类到子类的转换。
3. 有效显式引用转换
在运行时能成功进行(不抛出InvalidCastException异常)的显示转换有3种情况。
(1)显式转换是没必要的,即语言已经为我们进行了隐式转换。例如,从衍生类到基类的转换总是隐式转换。
(2)源引用是null。
示例:

(3)由源引用指向的实际数据可以被安全地进行隐式转换。

 

四、装箱转换和拆箱转换
1. 装箱转换
装箱是一种隐式转换,它接受值类型的值,根据这个值在堆上创建一个完整的引用类型对象并返回对象引用。
装箱是创建副本,在装箱后,该值有两份副本–原始值类型和引用类型副本,每个都可以独立操作。
示例:

图示:

2. 拆箱转换
拆箱(unboxing)是把装箱后的对象转换回值类型的过程。
(1)拆箱是显式转换。
(2)系统在拆箱时执行如下步骤:
它检测到要拆箱的对象实际是ValueTypeT的装箱值。
它把对象的值复制到变量。
示例:

 

五、用户自定义转换
1. 用户自定义转换语法

2. 用户自定义转换的约束
(1)只可以为类和结构定义用户自定义转换。
(2)不能重定义标准隐式转换或显式转换。
(3)对于源类型S和目标类型T,如下命题为真:
S和T必须是不同类型;
S和T不能通过继承关联;
S和T都不能是接口类型或object类型;
转换运算符必须是S或T的成员。
3. 用户自定义转换示例
示例:

使用implicit运算符定义转换,使用的是隐式转换。如果使用explicit运算符来定义转换,则需要使用强制转换表达式来进行转换。
示例:

4. 多步用户自定义转换
用户自定义转换在完成转换中最多可以有3个步骤。
示例:

图示:

 

六、is运算符和as运算符
1. is运算符
检查转换是否会成功完成。
语法:

只可用于引用转换、装箱、拆箱,不能用于用户自定义转换。
2. as运算符
用于强制类型转换,如果转换失败,返回null而不是抛出异常。
语法:

只能用于引用转换和装箱转换,不能用于用户自定义转换或到值类型的转换。

おすすめ

転載: www.cnblogs.com/wujuntian/p/10990376.html