工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C#の名前空間:命名競合を防ぐ仕組みと使い方

名前空間(namespace)は、1つの名前のセットを別の名前のセットから分離する方法を提供するために設計されています。ある名前空間で宣言されたクラス名は、別の名前空間で宣言された同じクラス名と競合しません。

名前空間の定義

名前空間の定義は、キーワードnamespaceに続けて名前空間名を指定します。

namespace namespace_name {
    // コード宣言
}

名前空間で修飾された関数や変数を呼び出すには、名前空間名を前置します。

namespace_name.item_name;

名前空間の使用例

using System;
namespace FirstSpace {
    class NamespaceClass {
        public void Func() {
            Console.WriteLine("Inside FirstSpace");
        }
    }
}

namespace SecondSpace {
    class NamespaceClass {
        public void Func() {
            Console.WriteLine("Inside SecondSpace");
        }
    }
}

class TestClass {
    static void Main(string[] args) {
        FirstSpace.NamespaceClass fc = new FirstSpace.NamespaceClass();
        SecondSpace.NamespaceClass sc = new SecondSpace.NamespaceClass();
        fc.Func();  // "Inside FirstSpace"
        sc.Func();  // "Inside SecondSpace"
        Console.ReadKey();
    }
}

実行結果:

Inside FirstSpace
Inside SecondSpace

usingキーワード

usingキーワードは、プログラムが指定された名前空間の名前を使用することを宣言します。例えば、プログラムでSystem名前空間を使用しています。Consoleクラスはそこに定義されています。私たちは単に以下のように書けます。

Console.WriteLine("Hello there");

完全修飾名で書くこともできます。

System.Console.WriteLine("Hello there");

usingディレクティブによる名前空間のインポート

using名前空間ディレクティブを使用すると、以降のコードで指定された名前空間の名前を使用することをコンパイラに伝えます。名前空間はその後のコードで暗黙的に適用されます。

using System;
using FirstSpace;
using SecondSpace;

namespace FirstSpace {
    class Abc {
        public void Func() {
            Console.WriteLine("Inside FirstSpace");
        }
    }
}

namespace SecondSpace {
    class Efg {
        public void Func() {
            Console.WriteLine("Inside SecondSpace");
        }
    }
}

class TestClass {
    static void Main(string[] args) {
        Abc fc = new Abc();      // FirstSpace.Abc
        Efg sc = new Efg();      // SecondSpace.Efg
        fc.Func();
        sc.Func();
        Console.ReadKey();
    }
}

usingの高度な用法

エイリアス(別名)の定義

名前が競合する場合や長い名前を短くしたい場合に使用します。

using ProjectA = MyCompany.ProjectA;
using ProjectB = MyCompany.ProjectB;

// 使用
ProjectA.ClassName obj1 = new ProjectA.ClassName();
ProjectB.ClassName obj2 = new ProjectB.ClassName();

using static(C# 6.0以降)

静的メンバーをクラス名なしで呼び出せるようになります。

using static System.Console;
using static System.Math;

class Program {
    static void Main() {
        WriteLine("Hello");        // Console.WriteLine
        WriteLine(Sqrt(16));       // Math.Sqrt
        WriteLine(PI);             // Math.PI
    }
}

ネストした名前空間

名前空間を別の名前空間内に定義できます。

namespace Namespace1 {
    // コード宣言
    namespace Namespace2 {
        // コード宣言
    }
}

ネストした名前空間のメンバーにはドット(.)演算子でアクセスします。

using System;
using FirstSpace;
using FirstSpace.SecondSpace;

namespace FirstSpace {
    class Abc {
        public void Func() {
            Console.WriteLine("Inside FirstSpace");
        }
    }
    
    namespace SecondSpace {
        class Efg {
            public void Func() {
                Console.WriteLine("Inside SecondSpace");
            }
        }
    }
}

class TestClass {
    static void Main(string[] args) {
        Abc fc = new Abc();
        Efg sc = new Efg();
        fc.Func();
        sc.Func();
        Console.ReadKey();
    }
}

グローバル名前空間

global::プレフィックスを使用すると、グローバル名前空間(ルート)からの完全修飾名で参照できます。名前空間名がクラス名と競合する場合などに有用です。

global::System.Console.WriteLine("Global namespace");

ファイルスコープの名前空間(C# 10.0以降)

ファイル全体が1つの名前空間に属する場合、波括弧を省略して1行で宣言できます。

namespace MyProject.Models;

public class User { ... }
public class Order { ... }

命名規則とベストプラクティス

レベルパターン例
ルートCompanyNameMyCompany
製品/プロジェクトCompanyName.ProductNameMyCompany.ECommerce
機能/レイヤーCompanyName.ProductName.FeatureMyCompany.ECommerce.Orders
サブ機能...MyCompany.ECommerce.Orders.Repositories

よくある問題と対処

C言語

  1. C# Hello World – 初めてのC#アプリケーション構築
  2. C# キーワードと識別子:ルール、一覧、ベストプラクティス完全ガイド
  3. C# 変数とプリミティブデータ型:完全マスターガイド
  4. C#演算子完全ガイド:C#における演算子の包括的解説
  5. C# ビット演算子とビットシフト演算子をマスターする:包括的ガイド
  6. C# 入出力の基礎:ユーザー入力と出力の基本をマスター
  7. C# の式、文、ブロック:実践例で徹底理解
  8. C# コメントをマスターする:種類、ベストプラクティス、XML ドキュメント
  9. C# switch 文をマスターする:構文、例、ベストプラクティス
  10. C# 三項演算子:条件式を簡潔に書くためのガイド
  11. C# break 文:使い方とタイミングを徹底解説