クラス、構造体またはインターフェイスの定義を、複数のファイルに分割できます。
// Form1.cs
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
// Form1.Designer.cs
partial class Form1
{
private void InitializeComponent()
{
}
}
分割するときは、それぞれの定義にpartialキーワードを付加します。これを怠ると「partial 修飾子が型 'type' にありません。この型の別の部分宣言が存在します」としてCS0260のエラーとなります。
アセンブリ内 | アセンブリ外 | ||||
---|---|---|---|---|---|
修飾子 | クラス内 | サブクラス | その他 | サブクラス | その他 |
private | ○ | × | × | × | × |
protected private ※1※2 | ○ | ○ | × | × | × |
protected | ○ | ○ | × | ○ | × |
internal | ○ | ○ | ○ | × | × |
protected internal ※1 | ○ | ○ | ○ | ○ | × |
public | ○ | ○ | ○ | ○ | ○ |
型のTypeからBindingFlags.NonPublicを指定してメンバの情報を取得すると、このアクセス修飾子の制約を回避できます。
アクセス修飾子を省略した場合、その対象によって
のように、暗黙的にアクセス修飾子が適用されます。
「アクセシビリティに一貫性がありません。パラメーターの型 'type' のアクセシビリティはメソッド 'method' よりも低く設定されています。」Compiler Error CS0051 | Microsoft Learn
methodのアクセス修飾子が、それで用いている型typeのアクセス修飾子よりも制限が緩いのが原因です。たとえばtypeがinternalで定義されているのに、methodを定義している型がpublicである場合などです。
「'function1': 'access' の継承メンバー 'function2' をオーバーライドするときに、アクセス修飾子を変更できません。」Compiler Error CS0507 | Microsoft Learn
override修飾子でオーバーライドせずに、new修飾子で隠蔽するようにします。c# - How to increase the access modifier of a property - Stack Overflow
または基本クラスと同一のアクセス修飾子とします。