C# プロジェクト間アクセスの基礎
この資料では、C#でプロジェクト間のクラスアクセスを行う方法と、アクセス修飾子 internal
および public
の使い方について説明します。また、ビルド後に生成されるDLLファイルやフォルダー構成についても触れます。具体例を用いて、プロジェクト間でクラスを共有する方法を解説します。
前提条件
- Visual Studio を使用
- C# プログラミングの基礎知識
- 2つのプロジェクト(クラスライブラリとコンソールアプリ)が必要
手順
ステップ 1: クラスライブラリプロジェクトの作成
まず、クラスを定義するためのクラスライブラリプロジェクトを作成します。
- Visual Studio で、
ClassLibrary1
という名前の新しいクラスライブラリプロジェクトを作成します。 - クラスライブラリプロジェクトに次のようなクラスを追加します。
MyClass.cs
(ClassLibrary1)
namespace ClassLibrary1
{
// internal クラスは同じプロジェクト内でのみアクセス可能
internal class InternalClass
{
public string GetMessage()
{
return "これは internal クラスです!";
}
}
// public クラスは他のプロジェクトからアクセス可能
public class PublicClass
{
public string GetMessage()
{
return "これは public クラスです!";
}
}
}
InternalClass
: これは internal 修飾子を持っており、同じプロジェクト(アセンブリ)内でのみアクセス可能です。PublicClass
: これは public 修飾子を持っており、他のプロジェクトからもアクセス可能です。
ステップ 2: コンソールアプリプロジェクトの作成
次に、ConsoleApp1
という名前の新しいコンソールアプリケーションプロジェクトを作成します。
- Visual Studioで、
ConsoleApp1
という名前の新しいコンソールアプリケーションプロジェクトを作成します。 - 次に、
ClassLibrary1
プロジェクトをConsoleApp1
から参照する必要があります。
参照の追加方法
ConsoleApp1
プロジェクトを右クリックして、[参照の追加] を選択します。- ダイアログボックスが開いたら、[プロジェクト] タブを選択します。
ClassLibrary1
を選択し、[OK] をクリックして参照を追加します。
これにより、ConsoleApp1
プロジェクトからClassLibrary1
のクラスにアクセスできるようになります。
ステップ 3: コンソールアプリでクラスを利用
次に、ConsoleApp1
のProgram.cs
に以下のコードを記述して、ClassLibrary1
からクラスにアクセスします。
Program.cs
(ConsoleApp1)
using System;
using ClassLibrary1; // ClassLibrary1の参照が必要
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// PublicClassはpublicなのでアクセス可能
PublicClass publicClass = new PublicClass();
Console.WriteLine(publicClass.GetMessage());
// InternalClassはアクセスできない(コメントアウトしてある部分がエラーになります)
// InternalClass internalClass = new InternalClass(); // エラー: InternalClassにアクセスできない
Console.ReadLine();
}
}
}
結果
コンソールに次のメッセージが表示されます。
これは public クラスです!
一方、InternalClass
にアクセスしようとすると、コンパイルエラーが発生します。これは、internal
修飾子によってクラスのアクセスがプロジェクト内に制限されているためです。
アクセス修飾子の違い
public
- 外部プロジェクトからアクセス可能:
public
修飾子がついているクラスやメンバーは、同じアセンブリ内だけでなく、他のプロジェクトからもアクセス可能です。 - 例:
PublicClass
は他のプロジェクトから使用できます。
internal
- 同じプロジェクト内でのみアクセス可能:
internal
修飾子は、そのクラスやメンバーを同じプロジェクト(アセンブリ)内でのみアクセス可能に制限します。他のプロジェクトからはアクセスできません。 - 例:
InternalClass
はクラスライブラリプロジェクト内でのみ使用可能です。
ビルド後のDLLの生成
DLLとは?
クラスライブラリをビルドすると、bin
フォルダーに DLL(Dynamic Link Library) ファイルが生成されます。このファイルには、クラスライブラリ内のクラスやメソッドが含まれており、他のプロジェクトからその機能を利用することができます。
フォルダー構成(ビルド後)
ビルド後、各プロジェクトにbin
フォルダーが生成され、その中にDLLや実行ファイル(EXE)が格納されます。
フォルダー構成例
/MySolution
│
├── /ClassLibrary1
│ ├── /bin
│ │ └── /Debug
│ │ └── net6.0
│ │ └── ClassLibrary1.dll <-- クラスライブラリのDLL
│ ├── /obj
│ ├── ClassLibrary1.csproj
│ └── MyClass.cs
│
└── /ConsoleApp1
├── /bin
│ └── /Debug
│ └── net6.0
│ └── ConsoleApp1.exe <-- コンソールアプリのEXE
│ └── ClassLibrary1.dll <-- クラスライブラリのDLLがコピーされる
├── /obj
├── ConsoleApp1.csproj
└── Program.cs
各ファイルの役割
ClassLibrary1.dll
: クラスライブラリのビルド後に生成されるDLLファイルです。このファイルには、ClassLibrary1
内で定義されたクラスやメソッド(PublicClass
やInternalClass
)が含まれています。このDLLファイルを他のプロジェクトから参照することで、クラスライブラリ内のコードを使用することができます。ConsoleApp1.exe
: コンソールアプリケーションのビルド後に生成される実行可能ファイル(EXE)です。このファイルは、アプリケーションのエントリーポイントを持っており、Main
メソッドから実行が開始されます。ConsoleApp1
フォルダーの中のClassLibrary1.dll
: コンソールアプリケーションがクラスライブラリを参照しているため、ビルド時にクラスライブラリのDLLがコピーされます。これにより、コンソールアプリはクラスライブラリ内のクラスやメソッドにアクセスできるようになります。
まとめ
- プロジェクト間でクラスを共有する場合は、
public
修飾子を使用する必要があります。 internal
修飾子は、クラスやメンバーを同じプロジェクト内に限定するのに役立ちます。- クラスライブラリをビルドするとDLLファイルが生成され、他のプロジェクトで再利用可能になります。
- DLLを利用して、プロジェクト間のクラスやメソッドを効率的に共有できます。
- プロジェクト間のクラスアクセスを行う際には、参照の追加が必要です。Visual Studioで簡単に追加できます。
この資料を使用して、プロジェクト間でのクラスアクセスとDLLの使用方法を理解し、実際にプロジェクトで動作確認を行うことができます。
ディスカッション
コメント一覧
まだ、コメントがありません