0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてのC#【 01_変数 】

Last updated at Posted at 2024-08-15

はじめに

 【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³⁰⁸
        精度: 1516桁の有効数字
 ☆C#でのデフォルトの浮動小数点型はdoubleで、
浮動小数点数を保持します。

11. decimal ・・・ 128ビット高精度浮動小数点(16バイト)
          : decimal moneyValue = 100.25m;

        範囲: ±1.0 × 10⁻²⁸  ±7.9 × 10²⁸
        精度: 2829桁の有効数字
 ☆非常に高い精度を持ち、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#のbool型とBoolean型の違いをわかりやすく解説


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

【C#】String型は不変を実証

※4

値型と参照型とミュータブルとイミュータブルと #C#


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

C#配列とは?宣言や初期化の方法など基礎をわかりやすく紹介

※7

【C#入門】Listの使い方総まとめ(ArrayList/Add/Remove/ソート/検索)


次回


参考文献

C#関連情報サイト様


0
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?