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!");
    }
}

부분 클래스 규칙

  • 모든 부분 클래스 정의는 동일한 프로그램 집합과 이름 공간에 위치해야 합니다.

  • 모든 부분은 동일한 접근성을 가지아야 합니다. 예를 들어 공개적이거나 사적인 등.

  • 부분 중 하나가 추상적이거나 기본적인 타입으로 선언되면 전체 클래스 선언은 동일한 타입으로 선언됩니다.

  • 다른 부분은 다른 기본 타입을 가질 수 있으므로 최종 클래스는 모든 기본 타입을 상속합니다.

  • Partial修饰符는 class, struct 또는 interface 키워드 앞에만 사용할 수 있습니다.

  • 부분 타입의 내장이 가능합니다.

부분 메서드

부분 클래스나 구조는 메서드를 포함할 수 있으며, 이 메서드는 부분 클래스나 구조의 두 개의 별도의 .cs 파일로 분할될 수 있습니다. 두 개의 .cs 파일 중 하나는 메서드의 서명을 포함해야 하며, 다른 파일은 선택적으로 부분 메서드의 구현을 포함할 수 있습니다. 메서드의 선언과 구현은 모두 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 매개변수가 없을 수 있습니다.

  • 부분 메서드는 익명私有 메서드이므로 가상 메서드가 될 수 없습니다.

  • 부분 메서드는 정적 메서드일 수 있습니다.

  • 부분 메서드는 일반적으로 일반 메서드입니다.