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

C#にグローバル変数が存在しない理由とは?スコープ解決演算子の役割を解説

C#には、C++のような「グローバル変数」の概念が存在しません。その代わり、C++でグローバル変数の参照に使われていたスコープ解決演算子(::)は、名前空間(namespace)との関連で使用される仕組みになっています。これを「global名前空間エイリアス」と呼びます。

global名前空間エイリアスとは?

異なる名前空間で同じ識別子を持つ型が存在する場合、どちらの型を参照したいのかを明確に区別する必要があります。そんなときに活躍するのが、スコープ解決演算子を使ったglobal名前空間エイリアスです。

たとえば、System.Consoleクラスを参照したい場合、次のように記述します。

global::System.Console

global::を付けることで、「プログラム全体の最上位(グローバル)名前空間」から検索することを明示できます。これにより、ローカルな名前空間内で同名のクラスが定義されていても、意図した型を確実に参照できるようになります。

サンプルコード

実際に、usingエイリアスとglobal名前空間エイリアスを組み合わせた例を見てみましょう。

using myAlias = System.Collections;
namespace Program {
    class Demo {
        static void Main() {
            myAlias::Hashtable h = new myAlias::Hashtable();

            h.Add("M", "1");
            h.Add("N", "2");
            h.Add("O", "3");
            h.Add("P", "4");

            foreach (string n in h.Keys) {
                global::System.Console.WriteLine(n + " " + h[n]);
            }
        }
    }
}

実行結果

N 2
O 3
M 1
P 4

まとめ

C#はグローバル変数を持たない設計になっており、代わりに名前空間による整理とカプセル化を重視しています。global::演算子を使えば、名前の衝突が起きても最上位の名前空間から確実に型を参照できるため、大規模なプロジェクトでも安全で読みやすいコードを書くことが可能です。

  1. サムスンGalaxyが充電できないときの原因と7つの対処法まとめ

    サムスンは世界で最も人気のあるスマートフォンメーカーのひとつで、年間販売台数ではAppleに匹敵します。ハイエンドスマートフォンであるGalaxyシリーズなら、充電はケーブルを挿すだけの簡単な作業だと考えがちです。しかし、いざ充電しようとしたときに「充電できない」という事態に直面すると、不安になってしまいますよね。スマートフォンユーザーにとって、このようなトラブルは大きなストレスです。この記事では、「サムスンが充電できない」問題の主な原因と、自宅で試せる効果的な解決策を詳しくご紹介します。Part 1:サムスンのスマホが充電できない主な原因サムスンのスマホが充電できない、あるいは電源が入らない

  2. iPhone XのFace IDが無効になる原因とは?再有効化・完全オフの設定方法も解説

    iPhone XのFace IDが使えなくなるのはなぜ?iPhone Xは発売当時、数多くの変更点を携えて登場しました。ソフトウェアやハードウェア、ディスプレイなど、あらゆる部分が大幅に進化しています。中でも最大の変更点は、ホームボタンの廃止でした。従来、ホームボタンは指紋認証(Touch ID)センサーとして機能していましたが、iPhone Xでは代わりに「Face ID」が導入されました。Face IDは、指紋認証よりも安全性の高い生体認証システムとされています。Face IDを支えているのは「TrueDepth(トゥルーデプス)カメラ」です。約30,000個の不可視のドットを顔に投影して