間違いがある場合は、コメントして修正してください。すぐに修正します。
意味
型: 型は、C# のデータの構造と動作を定義します。型の定義には、そのメンバー、基になる型、実装するインターフェイス、および型で許可される操作の定義が含まれます。C# には、数値型と参照型という 2 つのデータ型があります。
(1) 数値型: 数値型はデータそのものを直接指します。各数値変数には独自のデータのコピーがあり、数値変数を操作しても他の変数には影響しません。
(2) 参照型: 参照型データには、データ参照、またはオブジェクト参照が格納されます。同じオブジェクトを参照する 2 つの変数が存在する可能性があり、一方の参照変数を操作すると、もう一方の参照が指すオブジェクトに影響を与える可能性があります。
変数: 変数は、特定の種類のデータを指すシンボルに相当します。変数名は識別子であり、スペースを含まない一連の Unicode 文字です。変数名の先頭に @ が付いている場合、それはおそらく C# の予約キーワードです。予約キーワードは、他の言語と対話する場合に役立ちます。
数値型の詳しい説明
数値型はさらに、単純型、列挙型、構造型、null ポインタ型、タプル型に分類できます。
(1) シンプルタイプ
- 符号付き整数: sbyte、short、int、long
- 符号なし整数型: byte、ushort、uint、ulong
- Unicode 文字: char (utf-16 コード単位を表します)
- IEEE バイナリ浮動小数点型: float、double
- 高精度10進浮動小数点型:10進数
- ブール型: bool (ブール値を表し、true または false のみを指定できます)
(2) 列挙型
列挙型は、enum E{...} の形式で定義されるユーザー定義型です。列挙型は、名前付き定数を持つ一意の型です。各列挙定数には、上記の 8 つの整数型のいずれかである隠し型があります。したがって、列挙型のコレクションは、その非表示型のコレクションと同等です。
(3) 構造の種類
struct S {...} の形式で定義されたユーザー定義型。
(4) ヌルポインタ型
値がnullの値型の拡張
(5) タプル型
(T1、T2、T3...) で定義されたユーザー定義型
参照型の詳しい説明
参照型は、クラス、インターフェイス、デリゲート型に分類できます。
(1) クラスの種類
- 他のすべての型の最終基本クラス: object
- Unicode 文字列: 文字列。UTF-6 コーディング単位シーケンスまたは char シーケンスを表します。
- class C {...} の形式で定義されたユーザー定義型
(2) インターフェースの種類
フォームインターフェイス I {...} で定義されたユーザー定義型
(3) 配列型
1 次元配列、多次元配列、ギザギザ配列: int[]、int[,]、int[][] など。
ギザギザ配列の例を示します。
int[][] jaggedArray=
{
新しい int[]{1,2,3},
新しい int[]{4}、
新しい int[]{5,6}
}
(4)委任型(詳細はリンク先を参照してください。関数式と同様、関数を変数として使用します)
delegate int D(...) の形式で型を定義します。
概要
todo: C# 型の補足概要
クラス、構造体、インターフェイス、デリゲート型はすべてジェネリックスをサポートしているため、パラメーター化された設計が可能です。
Csharp は、あらゆる種類の 1 次元配列および多次元配列をサポートします。他の型とは異なり、配列型は使用前に宣言する必要がありません。配列型の宣言は、型の後に角括弧を置くことで完了できます。たとえば、int[] は 1 次元の整数配列を表し、int[,] は 2 次元の整数配列を表し、int[][] は 1 次元の整数配列を表します。次元 1 次元の整数配列。この配列はギザギザ配列とも呼ばれます。
Null 許容型を個別に定義する必要はありません。料金制御タイプ T ごとに、NULL 値を格納できる空のタイプ T? が関連付けられています。たとえば、int? は任意の 32 ビット整数または null 値を格納できます。文字列値とnull値を格納できます。
C# の型システムは統一されているため、あらゆる型の値をオブジェクトとして扱うことができます。C# のすべての型は、すべての型の最終的な基本クラスであるオブジェクト型から直接的または間接的に派生します。参照型の値は、型オブジェクトとして扱われるときはいつでもオブジェクトとして扱うことができます。ボックス化およびボックス化解除操作を実行することにより、値型の値をオブジェクトとして扱います。次の例では、int 値が object に変換されてから int に戻されます。
using System;
namespace TypeDemoApplication {
class TypeDemo {
public static void Main (string[] args) {
int i = 1;
Console.WriteLine("int i = " + i);
object o = i; // boxing
Console.WriteLine("boxing object i = " + o);
int j = (int) i; //unboxing
Console.WriteLine("unboxing int j = " + j);
}
}
}
出力:
値の型がオブジェクト参照に割り当てられると、値を格納するためにボックスが割り当てられます。このボックスは参照型のインスタンスであり、値はボックスにコピーされます。逆に、オブジェクト参照が値型にキャストされるときは、ボックス化された値が対応する型であるかどうかが最初にチェックされます。ボックス内の値は値の型にコピーされます。