はじめに
【C#(シーシャープ)】 はMicrosoft社が開発した
プログラミング言語で、C++やJavaに似た構文を持ち
.NET Framework上で稼働するWindowsアプリの開発や
Webアプリケーション開発のためのフレームワークである
ASP.NETが使用可能なプログラム言語です。
このメモは、C#の基本的な記載方法のまとめです。
以下のサブ垢記事のリンクもご参考までに。
プリミティブ型
基本データ型:値そのものを保持(直接的値保持※1)
※1 直接的値保持とは
C#のプリミティブ型(組み込みの値型)は、
変数そのものが値を直接メモリに保持します。
これにより、変数に代入された値に直接アクセスすることが可能です。
01. int ・・・ 32ビット整数(4バイト)
例: int number = 10;
範囲: -2,147,483,648 ~ 2,147,483,647
整数値を直接保持し、変数を通してアクセスします。
02. uint ・・・ 32ビット整数(4バイト)
例: uint unsignedInt = 3000000000;
範囲: 0 ~ 4,294,967,295
符号なしのため、負の値は扱えませんが、正の値の範囲が広がります。
03. long ・・・ 64ビット整数(8バイト)
例: long largeNumber = 33293304432234523L;
範囲: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
大きな整数値を保持します。
04. ulong ・・・ 64ビット整数(8バイト)
例: long largeNumber = 33293304432234523L;
範囲: 0 ~ 18,446,744,073,709,551,615
大きな整数値を保持し、符号がないため、負の値は使用できず、正の値の範囲が広がります。
05. short ・・・ 16ビット整数(2バイト)
例: short smallNumber = 32000;
範囲: -32,768 ~ 32,767
小さい整数値を保持します。
06. ushort ・・・ 16ビット整数(2バイト)
例: ushort smallUnsignedNumber = 60000;
範囲: 0 ~ 65,535
小さい整数値を保持し、符号なしのため、負の値は扱えませんが、正の値の範囲が広がります。
07. sbyte ・・・ 8ビット整数(1バイト)
例: sbyte signedByte = -100;
範囲: -128 ~ 127
符号があるため、負の値を扱う代わりに、正の値の範囲が狭まります。
08. byte ・・・ 8ビット整数(1バイト)
例:byte unsignedByte = 200;
範囲:0 ~ 255
符号がないため、負の値は使用できず、正の値の範囲が広がります。
09. float ・・・ 32ビット単精度浮動小数点(4バイト)
例: float floatValue = 5.99f;
範囲: 約 ±1.5 × 10⁻⁴⁵ ~ ±3.4 × 10³⁸
精度: 約7桁の有効数字
浮動小数点数を保持します。
10. double ・・・ 64ビット倍精度浮動小数点(8バイト)
例: float floatValue = 5.99f;
範囲: 約 ±5.0 × 10⁻³²⁴ ~ ±1.7 × 10³⁰⁸
精度: 約15~16桁の有効数字
☆C#でのデフォルトの浮動小数点型はdoubleで、
浮動小数点数を保持します。
11. decimal ・・・ 128ビット高精度浮動小数点(16バイト)
例: decimal moneyValue = 100.25m;
範囲: ±1.0 × 10⁻²⁸ ~ ±7.9 × 10²⁸
精度: 28~29桁の有効数字
☆非常に高い精度を持ち、floatやdoubleよりも大きなメモリを使用しますが、精度が必要な場面で有用です。
高精度の浮動小数点数を保持します。
12. char ・・・ 16ビット(2バイト)
例:char character = 'あ'; または '1';
範囲:Unicodeでの文字コード(\u0000 ~ \uffff)
☆Unicodeという文字コード規格での数字を表す(数字でも文字でもある)。
文字または数値を保持し、文字コードとしての意味を持ちます。
13. boolean ・・・ 8ビット整数(1バイト)
例:boolean isTrue = true; または boolean isFalse = false;
範囲:true(真)または false(偽)のみを保持
☆C#では論理値リテラル = true「真」 , false「偽」の値のみを持つことができます。空リテラル = nullは代入できません。
直接的に論理値を保持し、状態を明確に示します。
14. nint / nuint ・・・ 組み込みの値型
C# 9.0 以降、新しいプラットフォーム依存の値型である nint と nuint が追加されました。
型 | 説明 | CLR 型 |
---|---|---|
nint | 符号付き 32 または 64 ビット整数 | System.IntPtr |
nuint | 符号なし 32 または 64 ビット整数 | System.UIntPtr |
nint platformSpecificInt = 100;
nuint platformSpecificUnsignedInt = 200;
☆ネイティブサイズの整数
これらは、プラットフォームに依存して32ビットプロセスで実行される場合は、32ビット整数として
または
64ビットプロセスで実行される場合は、64ビットの整数型として振る舞います。
メモリ格納
C#では、変数の格納先はその型とスコープに応じて異なります。
プリミティブ型の変数は以下のようにメモリに格納されます。
ローカル変数
・値型のローカル変数はスタックに格納されます。
スタックはLIFO(Last In, First Out)形式で管理され、
スコープを抜けると自動的に解放されます。
ローカル変数の例
void MyMethod() {
int localVar = 10; // スタックに格納される
}
インスタンス変数
・クラスのフィールドとして宣言されたプリミティブ型の変数は、
インスタンスの一部としてヒープに格納されます。
これは、インスタンス自体がヒープに割り当てられるためです。
インスタンス変数の例
class MyClass {
int instanceVar = 20; // ヒープに格納される
}
静的変数
・静的なプリミティブ型の変数は、ヒープにある静的領域に格納されます。
静的変数の例
class MyClass {
static int staticVar = 30; // ヒープの静的領域に格納される
}
※2
C#におけるスコープと変数の有効範囲について
ローカルスコープ
変数は、その変数が宣言されたブロック(メソッドやループなど)内でのみ有効です。メソッド内で宣言された変数は、メソッド外からアクセスできません。
void MyMethod() {
int localVar = 10; // ローカル変数
Console.WriteLine(localVar); // このメソッド内でのみ使用可能
}
クラススコープ
クラス内で宣言された変数(フィールド)は、クラス内の全メソッドからアクセスできます。クラスのインスタンスを作成することで、フィールドにアクセスできるようになります。
class MyClass {
int classVar = 20; // クラスフィールド
void PrintVar() {
Console.WriteLine(classVar); // クラス内のどのメソッドからもアクセス可能
}
}
静的スコープ (static)
static キーワードを使うと、その変数やメソッドはクラスに属し、インスタンスを作成せずに直接アクセスできます。静的なメンバーはクラス全体で共有されるため、すべてのインスタンスから同じ値にアクセスします。
class MyClass {
static int staticVar = 30; // 静的変数
static void PrintStaticVar() {
Console.WriteLine(staticVar); // インスタンスなしでアクセス可能
}
}
MyClass.PrintStaticVar(); // 直接クラスからアクセス
利点と注意点
静的変数の利点: データを共有したい場合に便利です。
例えば、すべてのユーザーが同じ設定値を共有する場合に使用します。
ローカルスコープの利点: 外部からの影響を受けずに、独立したデータを保持できます。
注意点: 静的変数はプログラム全体で共有されるため、予期せぬデータ変更が起きる可能性があります。適切に管理することが重要です。
参照型変数
参照型:値(オブジェクト)への参照を保持(間接的値保持)する。
15. String ・・・ 文字列型
例:string greeting = "Hello, World!";
説明:文字列データはヒープに格納され、
string型の変数はその文字列データへの参照を保持します。
stringは不変(immutable)で、
一度作成された文字列は変更できません。※3,4
16. object ・・・ C#のすべての型の基底クラス
例:object obj = new object();
説明:すべての参照型と
値型はobject型に変換できます(ボックス化されます)。
17. class ・・・ クラス
説明:クラスはカスタムなオブジェクトを作成するための型で、
インスタンスはヒープに格納されます。
クラスの変数は、そのクラスのインスタンスへの参照を保持します。
クラスの例
/** 'Person' クラスの定義 **/
class Person {
public string Name; // フィールド(属性)
}
// 'Person' クラスの新しいインスタンスを作成
Person p = new Person();
// 'p' の 'Name' フィールドに 'Alice' という名前を代入
p.Name = "Alice";
// 'p' の 'Name' フィールドを出力
Console.WriteLine(p.Name); // 出力: Alice
※3
※4
18. array ・・・ 配列 ※5,6
説明:配列は、複数の要素をまとめて扱うための型で、参照型です。
配列自体はヒープに格納され、
配列変数はその配列への参照を保持します。
例:int[] numbers = new int[] { 1, 2, 3, 4, 5 };
19. List ・・・ コレクション型 ※7
説明:C#のコレクションは、複数の要素を管理するためのクラスで、
参照型です。これらもヒープに格納され、
参照型変数がそのコレクションへの参照を持ちます。
例:List<int> numbersList = new List<int> { 1, 2, 3, 4, 5 };
※5
【C#入門】配列の使い方総まとめ(宣言/代入/初期化/要素数/コピー)
※6
※7
【C#入門】Listの使い方総まとめ(ArrayList/Add/Remove/ソート/検索)
次回
参考文献
C#関連情報サイト様