English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# 分部クラスとメソッド(Partial)

C#では、partialキーワードを使用して、複数の.csファイルにわたるクラス、構造体、メソッド、インターフェースの実装を分割できます。コンパイルプログラムを実行すると、複数の.csファイルからのすべての実装が統合されます。

以下に、Employeeクラスを含むemployeeprops.csファイルとemployeemethods.csファイルを見てください。

public partial class Employee
{
    public int EmpId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
public partial class MyPartialClass
{
    public Employee(int Id, string name)
    {
        this.EmpId = Id;
        this.Name = name;
    }
    public void DisplayEmployeeInfo()
    {
        Console.WriteLine(this.EmpId + " " this.FirstName + " " + this.LastName);
    }
    public void Save(int id, string firstName, string lastName)
    {
        Console.WriteLine("Saved!");
    }
}

上記、EmployeeProps.csにはEmployeeクラスの属性が含まれ、employeememethods .csにはEmployeeクラスのすべてのメソッドが含まれています。これらのクラスはEmployeeクラスとしてコンパイルされます。

public class Employee
{
    public int EmpId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    public Employee(int Id, string name)
    {
        this.EmpId = Id;
        this.Name = name;
    }
    public void DisplayEmployeeInfo()
    {
        Console.WriteLine(this.EmpId + " " this.FirstName + " " + this.LastName);
    }
    public void Save(int id, string firstName, string lastName)
    {
        Console.WriteLine("Saved!");
    }
}

分部クラスのルール

  • すべての分部クラスの定義は同じアセンブリと名前空間に位置する必要があります。

  • すべての分部は同じアクセス修飾子(例えば、publicやprivateなど)を持たなければなりません。

  • もし分部のどれかが抽象的、密封、またはベース型と宣言された場合、そのクラス全体が同じ型と宣言されます。

  • 異なる分部は異なる基本型を持つことができますが、最終的なクラスはすべての基本型を継承します。

  • Partial修飾子は、class、struct、または interface キーワードの前にのみ出現できます。

  • 分部型のネストが許可されています。

分部メソッド

分部クラスや構造体には、分部クラスや構造体の2つの独立した.csファイルに分割できるメソッドが含まれることができます。2つの.csファイルのうち1つにはメソッドのシグネチャが含まれ、他のファイルには分部メソッドのオプションの実装が含まれます。メソッドの宣言と実装にはすべて partial キーワードが必要です。

public partial class Employee
{
    public int EmpId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    partial void GenerateEmployeeId();
}
public partial class MyPartialClass
{
    partial void GenerateEmployeeId()
    {
        this.EmpId = random();
    }
}

上記、employeeprops.cs ファイルには DisplayEmployeeInfo メソッドのシグネチャが含まれており、employeemethods.cs ファイルにはその実装が含まれています。コンパイラはコンパイル時にすべての分部を一つに統合します。

分部メソッドのシグネチャを含めなければなりませんが、実装は提供されません。そのメソッドが呼び出されたが実装されていない場合、コンパイル時または実行時のエラーは発生しません。

分部メソッドのルール

  • 分部メソッドはpartialキーワードを使用し、voidを返す必要があります。

  • 分部メソッドはinまたはref引数を持ち、out引数を持たないことができます。

  • 分部メソッドは暗黙的にプライベートメソッドであり、虚メソッドではありません。

  • 分部メソッドは静的メソッドでできます。

  • 分部メソッドはジェネリックメソッドでできます。