グローバル変数とは?静的フィールドを使いグローバル変数のように扱う方法

エンジニア
マネージャー
グローバル変数とは?
C#のグローバル変数について、説明いたします。
まず、プログラムにおけるグローバル変数とは、プログラム全体で使用する事ができる変数のことです。C#のグローバル変数に興味のあるかたは是非ご覧ください。
C#でグローバル変数は使うことができるのか?
C#にはグローバル変数が存在しません。これはC#の開発元であるMicrosoftが公式サイトに書いてあります。
しかし、C#では静的フィールドを、グローバル変数のように使用する事が可能です。
静的フィールドを使う方法
C#で静的フィールドを宣言する場合は、クラス内かつ、関数、メソッドの外で宣言します。その際にstaticを付けることで静的フィールドになります。
実際にC#で静的フィールドを使ってみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; class Program1 { //静的フィールドの変数 static int GLINT; static void Main(string[] args) { Program1 P1_Obj = new Program1(); //GLINT に100を代入 GLINT = 100; //Program1CW関数の呼び出し P1_Obj.Program1CW(); //Program1CWで値が代入されたことを確認する Console.WriteLine("P1_CWHW_2 : " + GLINT); } void Program1CW() { //値が代入されたことの確認と別メソッドで呼び出せるか確認する Console.WriteLine("P1_CWHW_1 : " + GLINT); //GLINT に1を代入 GLINT = 1; } } |
実行結果
P1_CWHW_1 : 100
P1_CWHW_2 : 1
上記のように、クラス内の二つの関数で値を変更することが可能です。
宣言時にstaticをつけ忘れるとエラーとなるため注意が必要です。
静的フィールドをグローバル変数のように使う方法
C#では静的フィールド宣言時にpublicを付けることでグローバル変数のように、他クラスからも値の変更が可能となります。
実際にpublicを付けて静的フィールドをグローバル変数のように、使ってみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
using System; class Program1 { //静的フィールドの変数 public追加 public static int GLINT; static void Main(string[] args) { Program1 P1_Obj = new Program1(); //GLINT に100を代入 GLINT = 100; //Program1CW関数の呼び出し P1_Obj.Program1CW(); //Program1CWで値が代入されたことを確認する Console.WriteLine("P1_CWHW_2 : " + GLINT); //Program2のP2_INTの呼び出し 追加部分 Program2.P2_INT(); //Program2のP2_INTで値が代入されたことを確認する 追加部分 Console.WriteLine("P1_CWHW_3 : " + GLINT); } void Program1CW() { //値が代入されたことの確認と別メソッドで呼び出せるか確認する Console.WriteLine("P1_CWHW_1 : " + GLINT); //GLINT に1を代入 GLINT = 1; } } //以下追加クラス class Program2 { public static void P2_INT() { //値が入っていることを確認する Console.WriteLine("P2_CWHW_1 : " + Program1.GLINT); //Program1にて宣言されているGLINTに200を代入する Program1.GLINT = 200; } } |
実行結果
P1_CWHW_1 : 100
P1_CWHW_2 : 1
P2_CWHW_1 : 1
P1_CWHW_3 : 200
上記のようにProgram1で宣言した静的フィールドに対し、Program2から値を変更することができました。
同じ変数名を使う
C#の静的フィールドは、ローカル変数や別クラスの静的フィールドと同じ名前を使用する事ができます。
実際に使ってみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
using System; class Program1 { //静的フィールドの変数 public追加 public static int GLINT; static void Main(string[] args) { //ローカル変数(静的フィールドと同じ名前) 追加部分 int GLINT; Program1 P1_Obj = new Program1(); //GLINT に100を代入 GLINT = 100; //Program1CW関数の呼び出し P1_Obj.Program1CW(); //Program1CWで値が代入されたことを確認する Console.WriteLine("P1_CWHW_2 : " + GLINT); //Program2のP2_INTの呼び出し 追加部分 Program2.P2_INT(); //Program2のP2_INTで値が代入されたことを確認する Console.WriteLine("P1_CWHW_3 : " + GLINT); } void Program1CW() { //値が代入されたことの確認と別メソッドで呼び出せるか確認する Console.WriteLine("P1_CWHW_1 : " + GLINT); //GLINT に1を代入 GLINT = 1; } } class Program2 { public static void P2_INT() { //値が入っていることを確認する Console.WriteLine("P2_CWHW_1 : " + Program1.GLINT); //Program1にて宣言されているGLINTに200を代入する Program1.GLINT = 200; } } |
実行結果
P1_CWHW_1 : 0
P1_CWHW_2 : 100
P2_CWHW_1 : 1
P1_CWHW_3 : 100
実行結果が変わってしまいました。これは本来静的フィールドに代入したい値が、ローカル変数への代入となってしまっているからです。ローカル変数と静的フィールドが同じ名前の場合は使いたい静的フィールドが宣言されているクラス名を書く必要があります。
実際に使ってみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
using System; class Program1 { //静的フィールドの変数 public追加 public static int GLINT; static void Main(string[] args) { //ローカル変数(静的フィールドと同じ名前) int GLINT = 9999; Program1 P1_Obj = new Program1(); //GLINT に100を代入 Program1.GLINT = 100; //Program1CW関数の呼び出し P1_Obj.Program1CW(); //Program1CWで値が代入されたことを確認する 追加部分 Console.WriteLine("P1_CWHW_2 : " + Program1.GLINT); //Program2のP2_INTの呼び出し 追加部分 Program2.P2_INT(); //Program2のP2_INTで値が代入されたことを確認する 追加部分 Console.WriteLine("P1_CWHW_3 : " + Program1.GLINT); //ローカル変数の値を確認する 追加部分 Console.WriteLine("P1_LC_GLINT : " + GLINT); } void Program1CW() { //値が代入されたことの確認と別メソッドで呼び出せるか確認する 追加部分 Console.WriteLine("P1_CWHW_1 : " + GLINT); //GLINT に1を代入 GLINT = 1; } } class Program2 { public static void P2_INT() { //値が入っていることを確認する Console.WriteLine("P2_CWHW_1 : " + Program1.GLINT); //Program1にて宣言されているGLINTに200を代入する Program1.GLINT = 200; } } |
実行結果
P1_CWHW_1 : 100
P1_CWHW_2 : 1
P2_CWHW_1 : 1
P1_CWHW_3 : 200
P1_LC_GLINT : 9999
実行結果が同じになり、ローカル変数には値が代入されないことを確認できました。
エンジニア
マネージャー
C#でグローバル変数をつかう
いかがでしたでしょうか。C#ではグローバル変数は存在しませんが、静的フィールドを使用する事で、グローバル変数のように扱うことができます。
静的フィールドで宣言した名前はローカル変数や、他クラスの静的フィールドでも宣言できます。
ぜひ静的フィールドをグローバル変数のように使えることを自身のコードで確認してみてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅)遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅)病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅)開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅)債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)