public/internal/protected/private(fileに関する注意点)
public、internal、protected、privateが可視性をどのように変えるかを学びます。継承と同一アセンブリ内のルールも確認します。fileスコープのアクセスはC# 6にはない点に注意します。
「public/internal/protected/private(fileに関する注意点)」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。
アクセス修飾子の概要
目標: 適切な可視性を選択します。
- public: どこからでもアクセス可能
- internal: 同じアセンブリ内からアクセス可能
- protected: 派生クラスからアクセス可能
- private: 同じクラス内からアクセス可能
- file: C# 6 より新しい機能(参考情報のみ)
private と public
フィールドは private に保ち、検証済みの public メンバーを公開してください。
using System;
// private: only inside the class; public: everywhere the class is visible
public class Box
{
private int _width; // hidden storage
public int Width // controlled access
{
get { return _width; }
set { _width = value < 0 ? 0 : value; } // simple guard
}
}
public class Program
{
public static void Main(string[] args)
{
Box b = new Box();
// b._width = -5; // INVALID: private (kept as comment)
b.Width = 10; // OK: public property
Console.WriteLine("Width = " + b.Width);
}
}
継承における protected
protected は継承のために使用します。派生型からは使用できますが、外部からは使用できません。
using System;
public class BaseCounter
{
protected int Count; // derived classes can see this
public int Value() { return Count; }
}
public class StepCounter : BaseCounter
{
public void Step() { Count = Count + 1; } // allowed: protected
}
public class Program
{
public static void Main(string[] args)
{
StepCounter sc = new StepCounter();
sc.Step();
// sc.Count = 5; // INVALID from outside (commented)
Console.WriteLine("Value = " + sc.Value());
}
}
internal アクセス
internal は、現在のアセンブリ(ライブラリまたはアプリのビルド)内に可視性を制限します。
using System;
// internal type: visible only inside this assembly
internal class InternalHelper
{
public static string Ping() { return "pong"; }
}
// public type can use internal from the same assembly
public class UsesInternal
{
public string Call() { return InternalHelper.Ping(); }
}
public class Program
{
public static void Main(string[] args)
{
UsesInternal u = new UsesInternal();
Console.WriteLine(u.Call());
}
}
protected internal
protected internal は、派生型または同じアセンブリ内のどこからでもアクセスできることを意味します。
using System;
public class LibraryBase
{
// Accessible to derived types OR anywhere in the same assembly
protected internal void Touch() { Console.WriteLine("touched"); }
}
public class LibChild : LibraryBase
{
public void Use() { Touch(); } // via inheritance
}
public class Program
{
public static void Main(string[] args)
{
LibChild c = new LibChild();
c.Use();
LibraryBase b = new LibraryBase();
b.Touch(); // same assembly, allowed
}
}
file 修飾子に関する注意とヒント
注意: file アクセス修飾子は新しい C# で導入されたもので、C# 6 にはありません。C# 6 では public、internal、protected、private、protected internal を使用してください。
- デフォルトでは private を優先してください
- API の公開範囲に含める場合のみ public を使用してください
- 他のアセンブリから実装を隠すには internal を使用してください
- 基底クラスと派生クラスの連携には protected を使用してください
internal の意味
まとめ
まとめ: 必要最小限の可視性を選択します。private → protected/internal → public の順に検討してください。C# 6 には新しい file 修飾子がないため、アセンブリ単位で隠すには internal を使用します。
よくある質問
「public/internal/protected/private(fileに関する注意点)」レッスンは無料ですか?
はい。「public/internal/protected/private(fileに関する注意点)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。
「public/internal/protected/private(fileに関する注意点)」で何を学びますか?
public、internal、protected、privateが可視性をどのように変えるかを学びます。継承と同一アセンブリ内のルールも確認します。fileスコープのアクセスはC# 6にはない点に注意します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。
「public/internal/protected/private(fileに関する注意点)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- public/internal/protected/private(fileに関する注意点)
- 名前空間、usingディレクティブ、global using(注意点)
- partial型とファイル