C#におけるクラスのデフォルトアクセス修飾子とは?internalの基本を解説
C#では、クラスやメンバにアクセス修飾子を明示的に指定しなかった場合、デフォルトのアクセスレベルはinternal(内部)になります。
internalアクセス指定子が付いたクラスやメンバは、同じアセンブリ(同一プロジェクト・同一EXE/DLL)内にある他のクラスやメソッドから自由にアクセスできます。ただし、アセンブリの外部からは参照できないため、ライブラリ内部でのみ使用する型やメンバを定義したい場合に適しています。
言い換えると、internalメンバは「そのメンバが定義されているアプリケーション(アセンブリ)内であれば、どのクラス・どのメソッドからでもアクセス可能」ということになります。
internalアクセス指定子の使用例
次のコードは、internalアクセス指定子を使った具体的な例です。Rectangleクラスのフィールドlengthとwidthにinternalを指定し、同じアセンブリ内のExecuteRectangleクラスからアクセスしています。
using System;
namespace RectangleApplication {
class Rectangle {
// メンバ変数
internal double length;
internal double width;
double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}// Rectangleクラスの終わり
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}実行結果
Length: 4.5 Width: 3.5 Area: 15.75
補足:C#の主なアクセス修飾子一覧
参考までに、C#で利用できる主なアクセス修飾子とそのスコープは以下の通りです。
- public:すべてのコードからアクセス可能
- private:同じクラス(または構造体)内からのみアクセス可能
- internal:同じアセンブリ内からのみアクセス可能(クラスのデフォルト)
- protected:同じクラスおよび派生クラスからアクセス可能
- protected internal:同じアセンブリ内、または派生クラスからアクセス可能
このように、アクセス修飾子を省略したクラスはinternalとして扱われるため、意図せず外部に公開されることはありません。カプセル化の観点からも、必要以上にpublicを付けず、適切なアクセスレベルを選択することが推奨されます。
-
C#のすべての例外の基本クラスとは?System.Exceptionクラスの階層を解説
C#における例外の基本クラスとは C#の例外処理において、すべての例外クラスの最上位に位置するのがSystem.Exceptionクラスです。このクラスから派生する主要な例外クラスとして、System.SystemExceptionクラスとSystem.ApplicationExceptionクラスの2つがあります。 System.SystemExceptionクラスは、.NETランタイムが事前に定義しているすべてのシステム例外(定義済み例外)の基本クラスであり、プログラムの実行中に発生するさまざまなエラーの多くは、このクラスから派生しています。 一方、System.ApplicationEx
-
C#のArrayListクラスとは?主なメソッド一覧とSort()による並べ替え方法を解説
ArrayListクラスは、個別にインデックスでアクセスできるオブジェクトの順序付きコレクションを表します。基本的には配列(Array)の代替として利用できる便利なコレクションです。要素数が事前にわからない場合でも動的にサイズが拡張されるため、柔軟なデータ管理が可能になります。ArrayListクラスの主なメソッドArrayListクラスには、要素の追加・削除・検索・並べ替えなどを行うための多彩なメソッドが用意されています。以下に主要なメソッドとその説明をまとめました。番号メソッドと説明1public virtual int Add(object value);ArrayListの末尾にオブジ