C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のクラス変数と静的変数(static変数)の違いと使い方

静的変数(static変数)とは

C#における静的変数(static変数)は、クラスのインスタンスを生成しなくてもクラス名を使って直接アクセスできる変数です。この特性から、定数の定義などに広く利用されています。静的変数はメンバー関数の外部やクラス定義の外部で初期化できるほか、クラス定義の中で直接初期化することも可能です。

静的変数のもう一つの重要な特徴は、すべてのインスタンス間で値が共有されるという点です。次のサンプルコードでその挙動を確認してみましょう。

サンプルコード

using System;

namespace StaticVarApplication {
    class StaticVar {
        public static int num; // 静的変数:全インスタンスで共有される

        public void count() {
            num++;
        }
        public int getNum() {
            return num;
        }
    }
    class StaticTester {
        static void Main(string[] args) {
            StaticVar s1 = new StaticVar();
            StaticVar s2 = new StaticVar();

            // s1 経由で3回呼び出し
            s1.count();
            s1.count();
            s1.count();

            // s2 経由で3回呼び出し
            s2.count();
            s2.count();
            s2.count();

            Console.WriteLine("s1 の num 変数の値: {0}", s1.getNum());
            Console.WriteLine("s2 の num 変数の値: {0}", s2.getNum());
            Console.ReadKey();
        }
    }
}

実行結果

s1 の num 変数の値: 6
s2 の num 変数の値: 6

s1 と s2 という別々のインスタンスから count() をそれぞれ3回ずつ呼び出しましたが、どちらも「6」と表示されました。これは、静的変数 num が各インスタンスではなくクラス自体に属しており、すべてのインスタンスで同じ値を共有しているためです。

クラス変数(インスタンス変数)とは

一方、クラス変数(インスタンス変数・フィールド)はオブジェクトの属性を表すものであり、設計上の観点からカプセル化を実現するために private として宣言されるのが一般的です。これにより、外部からは直接アクセスできず、public なメンバー関数(メソッド)を介してのみ値の読み書きが行えます。

具体的な例を見てみましょう。

サンプルコード

using System;

namespace BoxApplication {
    class Box {
        private double length;  // 箱の長さ
        private double breadth; // 箱の幅
        private double height;  // 箱の高さ

        public void setLength(double len) {
            length = len;
        }
        public void setBreadth(double bre) {
            breadth = bre;
        }
        public void setHeight(double hei) {
            height = hei;
        }
        public double getVolume() {
            return length * breadth * height;
        }
    }
    class BoxTester {
        static void Main(string[] args) {
            Box box1 = new Box(); // Box型のbox1を宣言
            Box box2 = new Box(); // Box型のbox2を宣言
            double volume;

            // box1 のサイズ設定
            box1.setLength(6.0);
            box1.setBreadth(7.0);
            box1.setHeight(5.0);

            // box2 のサイズ設定
            box2.setLength(12.0);
            box2.setBreadth(13.0);
            box2.setHeight(10.0);

            // box1 の体積を計算して表示
            volume = box1.getVolume();
            Console.WriteLine("Box1 の体積: {0}", volume);

            // box2 の体積を計算して表示
            volume = box2.getVolume();
            Console.WriteLine("Box2 の体積: {0}", volume);
            Console.ReadKey();
        }
    }
}

実行結果

Box1 の体積: 210
Box2 の体積: 1560

この例では、length・breadth・height の3つのフィールドを private で宣言し、setLength() などの public メソッドを通じてのみアクセスできるようにしています。これにより、オブジェクトの内部状態が外部から不正に変更されるのを防ぎ、データの整合性を保つことができます。

まとめ

  • 静的変数(static変数):クラスに属し、インスタンスを生成しなくてもアクセス可能。すべてのインスタンスで値が共有される。
  • クラス変数(インスタンス変数):オブジェクトごとに個別の値を持つ属性。カプセル化のため private で宣言し、public メソッド経由でアクセスするのが一般的。
  1. Javaのstaticキーワードとは?メソッド・変数・ブロックの使い方を徹底解説

    Javaのstaticキーワードの使い方Javaでクラスを扱う際、通常はクラスのインスタンスを生成してから、そのメンバーにアクセスする必要があります。しかし、インスタンスを生成せずにクラスメンバーを定義したい場面もあります。そんなときに役立つのが、Javaのstaticキーワードです。staticキーワードを使用すると、インスタンスを生成しなくてもアクセスできるクラスメンバーを定義できます。この記事では、具体例を交えながら、staticキーワードの基本と、Javaプログラムでの実践的な使い方を解説します。JavaのクラスとはJavaにおいて、クラスはオブジェクトの設計図です。例えば、Order

  2. Android Studioで静的変数(static)を使う方法と適切な活用場面を解説

    静的変数(static変数)は、クラスのインスタンスを生成しなくてもアクセスできる特殊な変数です。すべてのインスタンス間で値が共有され、プログラムの実行中に一度だけメモリへ割り当てられます。Androidアプリ開発では、ログ出力用のタグ定数やアプリ全体で共通する設定値の管理など、さまざまな場面で活用されています。この記事では、Android Studioで静的変数を宣言し、実際に使用するまでの手順をサンプルコードとともに分かりやすく解説します。静的変数とは?静的変数はクラスそのものに属し、ClassName.variableName の形式でどこからでもアクセスできます。特に static f