目次
2. 参照型は、クラス、レコード、デリゲート、配列、またはインターフェイスの型として定義されます。
C# データ型システム
C# は厳密に型指定された言語です。すべての変数と定数には、式と同様に型があり、すべてのメソッド宣言は、すべての入力パラメーターと戻り値の名前、型、および種類 (値、参照、または出力) を指定します。プログラムで変数または定数を宣言するときは、その型を指定するか、var キーワードを使用してコンパイラに型を推測させる必要があります。
ビルトインタイプ
C# には、組み込み型の標準セットが用意されています。これらの型は、整数、浮動小数点値、ブール式、テキスト文字、10 進数値、およびその他のデータ型を表します。ビルトイン string
や object
タイプもあります。これらの型は、任意の C# プログラムで使用できます。組み込み型の完全なリストについては。
カスタムタイプ
struct、class、interface、enum 、 および recordコンストラクト を使用して、 独自のカスタム型を作成できます。.NET クラス ライブラリ自体は、独自のアプリケーションで使用するカスタム型のセットです。既定では、クラス ライブラリで最も一般的に使用される型は、すべての C# プログラムで使用できます。他の型は、それらを定義するアセンブリにプロジェクト参照を明示的に追加した場合にのみ使用できます。アセンブリがコンパイラによって参照された後、このアセンブリで宣言された型の変数 (および定数) をソース コードで宣言できます。詳細については。
ジェネリック型システム
.NET の型システムに関しては、次の 2 つの基本事項を理解することが重要です。
継承の原則をサポートしています。型は、他の型から派生させることができます (基本型と呼ばれます)。派生型は、基本型のメソッド、プロパティ、およびその他のメンバーを (いくつかの制限付きで) 継承します。次に、基本型は他の型から派生できます。この場合、派生型は継承階層で両方の基本型のメンバーを継承します。System.Int32 (C# キーワード: ) などの組み込みの数値型を含むすべての型は、 int
最終的に単一の基本型 System.Object (C# キーワード: object ) から派生します。このような統一された型階層は、Common Type System (CTS) と呼ばれます。C# での継承の詳細については、「継承」を参照してください。
CTS のすべての型は、値型または参照型のいずれかとして定義されています。これらの型には、.NET クラス ライブラリのすべてのカスタム型と独自のユーザー定義型が含まれます。キーワードを使用して struct
定義された型は値型です。組み込みの数値型はすべてです structs
。 or キーワードを使用して 定義された型は参照型です。参照型と値型は、さまざまなコンパイル時の規則と実行時の動作に従います。 class
record
クラスと構造体は、.NET ジェネリック型システムの 2 つの基本的な構成要素です。C# 9 はレコードを追加します。レコードはクラスです。それぞれは基本的に、論理単位として一緒に属する一連のデータと動作をカプセル化するデータ構造です。データと動作は、クラス、構造体、またはレコードのメンバーです。これらの動作には、メソッド、プロパティ、イベントなどが含まれます。
(1) クラスは参照型です。型のオブジェクトが作成された後、オブジェクトが割り当てられた変数は、対応するメモリへの参照のみを保持します。オブジェクト参照が新しい変数に割り当てられると、新しい変数は元のオブジェクトを参照します。1 つの変数で行われた変更は、同じデータを参照するため、他の変数に反映されます。
(2) 構造体は値型です。構造体が作成されると、構造体が割り当てられた変数は構造体の実際のデータを保持します。構造体を新しい変数に代入すると、構造体がコピーされます。したがって、新しい変数と元の変数には、同じデータのコピー (合計 2 つ) が含まれます。1 つのコピーに加えられた変更は、他のコピーには影響しません。
(3) レコード型は、参照型 ( record class
) または値型 ( record struct
) のいずれかです。
データ型:値型、参照型、ポインタ型
1. 値の型はstruct
次のように分類されます。enum
組み込み数値型は構造体であり、値型変数はその値を直接含み、以下に示すように int、char、float、long などの値に直接割り当てることができます。
タイプ | 説明 | 範囲 | デフォルト |
---|---|---|---|
ブール | ブール値 | 正しいか間違っているか | 間違い |
バイト | 8 ビット符号なし整数 | 0~255 | 0 |
チャー | 16 ビット Unicode 文字 | U +0000 から U +ffff | '\0' |
小数 | 128 個の正確な 10 進数値、28 ~ 29 桁の有効数字 | (-7.9×1028~7.9×1028)/100~28 | 0.0M |
ダブル | 64 ビット倍精度浮動小数点 | (+/-)5.0 x 10-324 ~ (+/-)1.7 x 10308 | 0.0D |
浮く | 32 ビット単精度浮動小数点 | -3.4×1038~+3.4×1038 | 0.0F |
整数 | 32 ビットの符号付き整数型 | -2,147,483,648 ~ 2,147,483,647 | 0 |
長さ | 64 ビットの符号付き整数型 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0L |
バイト | 8 ビット符号付き整数型 | -128~127 | 0 |
短い | 16 ビットの符号付き整数型 | -32,768 ~ 32,767 | 0 |
単位 | 32 ビット符号なし整数型 | 0 ~ 4,294,967,295 | 0 |
頭 | 64 ビット符号なし整数型 | 0 ~ 18,446,744,073,709,551,615 | 0 |
ショート | 16 ビット符号なし整数型 | 0 ~ 65,535 | 0 |
using System;
namespace DataTypeApplication
{
class Program
{
static void Main(string[] args)
{
//获取类型长度sizeof(type)
Console.WriteLine("Size of int: {0}", sizeof(int));
Console.ReadLine();
}
}
}
//输出Size of int:4
//结构类型struct
public struct Coords
{
public int x, y;
public Coords(int p1, int p2)
{
x = p1;
y = p2;
}
}
//enum枚举类型
public enum FileMode
{
CreateNew = 1,
Create = 2,
Open = 3,
OpenOrCreate = 4,
Truncate = 5,
Append = 6,
}
2.参照型は class
、、、デリゲート、配列、または インターフェイスの型として定義されます 。record
特定の data を直接指すのではなく、データ変数、 object、dynamic 、および stringのメモリ アドレスを参照します。
オブジェクトはすべての型の基本クラスであり、任意の型 (値型、参照型、カスタム型) に割り当てることができ、割り当て前に変換する必要があります。
値型を参照型に変換することはボックス化であり、参照型を値型に変換することはボックス化解除です。
dynamic : dynamic 型は、動的データ型変数に任意の型の値を格納できます。これらの変数の型チェックは実行時に行われます。
動的型付けはオブジェクト型付けに似ていますが、オブジェクト型変数の型チェックはコンパイル時に行われ、動的型変数の型チェックは実行時に行われます。
String : 文字列型、2 つの形式で割り当てられます: 引用符と @quotation マーク; C# 文字列の前に @ を付けて (「逐語的文字列」と呼ばれます)、エスケープ文字 (\) を通常の文字として扱うことができます。
ユーザー定義の参照型: クラス、インターフェイス、またはデリゲート
配列: 配列定義の静的初期化、動的初期化
//引用类型创建
MyClass myClass = new MyClass();
MyClass myClass2 = myClass;
//指定长度,动态初始化分配,数组都是引用类型,系统会根据长度分配初始值
//1.指定数据的长度和类型
string[] name = new string[3];
name[0] = "张三";
name[1] = "李四";
name[2] = "王五";
//2.指定长度,直接赋值
string[] name1 = new string[3]{"张三","李四","王五"};
//静态初始化
//3.不指定长度,直接赋值
string[] type= new string[]{"01","02","03"};
//4.简写赋值
string[] course = {"语文","数学","生物"};
オブジェクトが作成されると、マネージ ヒープにメモリが割り当てられます。変数は、オブジェクトの場所への参照を保持するだけです。マネージド ヒープの型の場合、メモリの割り当てとメモリの再利用の両方でオーバーヘッドが発生します
(1).ArrayList 配列:
ArrayList は、配列定義後に配列の長さを増やすことができる可変長配列型であり、順序付きコレクションです。さまざまな型のオブジェクト オブジェクトを格納し、値を取得した後にデータ型変換が必要です。
(2).hashTable配列:
hashTable はキーと値を格納する配列であり、順序付けされていないコレクションであり、キーによって評価できます
(3).ジェネリックコレクション: List<type>
不確かなタイプの問題を回避するためにリストのタイプを制限する
(4).Dictionary<オブジェクト,オブジェクト>
3) ポインター型: ポインター型変数には、別の種類のメモリ アドレスが格納されます。