2022年01月30日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 1022 count

namespaceキーワードとusingディレクティブ: 名前空間は名前の衝突を解決する

Written By: 川俣 晶連絡先

この章のテーマ §

 namespaceキーワードとusingディレクティブについて学びます。usingディレクティブはusingステートメントとは違うものなので注意して下さい。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, クラスの基礎, メソッドの基礎

解説 §

 クラスのメンバーの名前が衝突したときは、オーバーロードなどの方法で解決できる場合があります。しかし、クラス名そのものが衝突したときには対処できません。このような場合は名前空間という技術を使うことで、同じクラス名を複数使うことができます。

 これは、たまたま利用した複数のクラスライブラリで同じ名前を使っていた、といった問題を解決するのに便利です。

 名前空間を利用する場合、namespaceキーワードで特定の名前が付いた名前空間を定義できます。この名前空間に属するクラスなどは、"名前空間名.型名"という書式で名前を記述でき、同じ名前で名前空間が違えば識別できます。

 これだけは不便なので、usingディレクティブが存在します。usingディレクティブは、特定の名前空間を利用することを宣言し、その名前空間名を書くことを省略できます。

 たとえば、多くのサンプルソースでConsoleクラスを使っていますが、これのフルネームはSystem.Consoleです。Systemという名前空間に属しています。しかし、usingディレクティブがあるので、"System."は省略できます。「そんなusingディレクティブ見たことないぞ」という人も多いと思いますが、それもそのはず、それは共通のSDKに含まれるglobal usingの定義にあるからです。これを使うかどうかはプロジェクトのプロパティで設定できます。デフォルトでは使用するように設定されています。

罠の数々 §

  • たとえば、PathクラスはSystem.IO.PathクラスとSystem.Windows.Shapes.Pathクラスなど、名前がかぶりやすい。しかし、名前がかぶってもフルネームを名前空間から書けば安全に識別できる
  • フルネームを書くか先頭にusingディレクティブを書くかは微妙な時がある。どちらでも動作は同じだから悩みすぎるな
  • 名前空間の付け方に特別厳格なルールはない。しかし、みんなが使うライブラリを書くなら、他人のライブラリとかぶらないような名前を工夫すると良い。SystemやMicrosoftや他社名から始まる名前空間名は使うべきではない

参考リンク §

namespace

using ディレクティブ

型を整理する名前空間を宣言する

サンプルソース: kw_namespace §

using NamespaceBeta;

var x = new NamespaceAlpha.MySample();

x.Sub();

var y = new MySample();

y.Sub();

namespace NamespaceAlpha

{

    public class MySample

    {

        public void Sub()

        {

            Console.WriteLine("I'm NamespaceAlpha.MySample.Sub()");

        }

    }

}

namespace NamespaceBeta

{

    public class MySample

    {

        public void Sub()

        {

            Console.WriteLine("I'm NamespaceBeta.MySample.Sub()");

        }

    }

}

実行結果 §

I'm NamespaceAlpha.MySample.Sub()

I'm NamespaceBeta.MySample.Sub()

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 ソースコード中に以下のようなソースファイルを発見した。ここには1つのクラスが記述されている。このクラスのフルネーム(GetType().FullNameで取得できる名前)は何だろうか。

namespace MyNamespace;

public class MyClass

{

    public void Sub()

    {

        Console.WriteLine("Hello!");

    }

}

  1. MyNamespace
  2. MyClass
  3. Sub
  4. MyNamespace.MyClass
  5. Hello!

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2022年
01月
31日
nameof式: あなたの名前そのものが欲しいのです
3days 0 count
total 1174 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2022年
01月
29日
using文: 確実な終了処理の保証
3days 0 count
total 1061 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20220130092734
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.