修飾子

partial

クラス、構造体またはインターフェイスの定義を、複数のファイルに分割できます。

// Form1.cs
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
}
// Form1.Designer.cs
partial class Form1
{
    private void InitializeComponent()
    {
    }
}

分割するときは、それぞれの定義にpartialキーワードを付加します。これを怠ると「partial 修飾子が型 'type' にありません。この型の別の部分宣言が存在します」としてCS0260のエラーとなります。

アクセス修飾子 (access modifiers) / アクセシビリティ修飾子 (accessibility modifiers)

アクセス可能な範囲
  アセンブリ内 アセンブリ外
修飾子 クラス内 サブクラス その他 サブクラス その他
private × × × ×
protected private ※1※2 × × ×
protected × ×
internal × ×
protected internal ※1 ×
public
※1 記述順は問われず、private protected、internal protectedでも良い ※2 C# 7.2以降でサポートされる

型のTypeからBindingFlags.NonPublicを指定してメンバの情報を取得すると、このアクセス修飾子の制約を回避できます。

既定値

アクセス修飾子を省略した場合、その対象によって

  • クラスと構造体 (のアクセス修飾子) … internal
  • クラスと構造体のメンバ (メンバのアクセス修飾子) … private
  • 列挙型とインターフェイスのメンバ … public

のように、暗黙的にアクセス修飾子が適用されます。

トラブル対処法

CS0051

アクセシビリティに一貫性がありません。パラメーターの型 'type' のアクセシビリティはメソッド 'method' よりも低く設定されています。Compiler Error CS0051 | Microsoft Learn

methodのアクセス修飾子が、それで用いている型typeのアクセス修飾子よりも制限が緩いのが原因です。たとえばtypeがinternalで定義されているのに、methodを定義している型がpublicである場合などです。

CS0507

'function1': 'access' の継承メンバー 'function2' をオーバーライドするときに、アクセス修飾子を変更できません。Compiler Error CS0507 | Microsoft Learn

override修飾子でオーバーライドせずに、new修飾子で隠蔽するようにします。c# - How to increase the access modifier of a property - Stack Overflow

または基本クラスと同一のアクセス修飾子とします。

Microsoft Learnから検索