이 설명서는 보관되지만 유지 되지 않습니다.

Partial 클래스 정의(C# 프로그래밍 가이드)

클래스구조체의 정의 또는 인터페이스를 두 개 이상의 소스 파일로 분할할 수 있습니다. 응용 프로그램을 컴파일할 때는 클래스 정의 섹션이 들어 있는 각 소스 파일과 모든 부분이 결합됩니다. 클래스 정의는 다음과 같은 여러 가지 상황에서 분할할 수 있습니다.

  • 대규모 프로젝트를 진행하는 경우 클래스를 개별 파일로 분할하면 여러 프로그래머가 동시에 작업을 수행할 수 있습니다.

  • 자동으로 생성된 소스를 사용하여 작업하는 경우 소스 파일을 다시 만들지 않고도 클래스에 코드를 추가할 수 있습니다. Visual Studio에서는 Windows Forms, 웹 서비스 래퍼 코드 등을 만들 때 이러한 방식을 사용합니다. Visual Studio에서 생성된 파일을 편집하지 않고도 이러한 클래스를 사용하는 코드를 만들 수 있습니다.

  • 클래스 정의를 분할하려면 다음과 같이 partial 키워드 한정자를 사용합니다.

public partial class Employee
{
    public void DoWork()
    {
    }
}

public partial class Employee
{
    public void GoToLunch()
    {
    }
}

partial 키워드를 사용하면 클래스, 구조체 또는 인터페이스의 다른 부분을 네임스페이스 안에서 정의할 수 있습니다. 모든 부분에 partial 키워드를 사용해야 합니다. 최종 형식을 생성하려면 컴파일할 때 모든 부분을 사용할 수 있어야 합니다. 모든 부분의 액세스 가능성은 공용, 전용 등과 같이 동일한 수준이어야 합니다.

일부가 추상으로 선언되면 전체 형식이 추상으로 간주됩니다. 일부가 봉인된 것으로 선언되면 전체 형식이 봉인된 것으로 간주됩니다. 일부가 기본 형식으로 선언되면 전체 형식이 이 클래스를 상속합니다.

기본 클래스를 지정하는 모든 부분이 일치해야 하지만 기본 클래스를 생략하는 부분에서도 기본 형식을 상속합니다. 부분은 서로 다른 기본 인터페이스를 지정할 수 있고 최종 형식은 모든 partial 선언에 나열된 모든 인터페이스를 구현합니다. partial 정의에 선언된 모든 클래스, 구조체 또는 인터페이스 멤버를 다른 모든 부분에 사용할 수 있습니다. 최종 형식은 컴파일 타임에 모든 부분의 조합이 됩니다.

Note참고

대리자나 열거형 선언에는 partial 한정자를 사용할 수 없습니다.

중첩된 형식은 이를 포함하는 형식 자체가 partial이 아니어도 partial이 될 수 있습니다. 예를 들면 다음과 같습니다.

class Container
{
    partial class Nested
    {
        void Test() { }
    }
    partial class Nested
    {
        void Test2() { }
    }
}

  • 컴파일 타임에 partial 형식 정의의 특성이 병합됩니다. 예를 들어, 다음 선언은

[System.SerializableAttribute]
partial class Moon { }

[System.ObsoleteAttribute]
partial class Moon { }

다음과 같습니다.

[System.SerializableAttribute]
[System.ObsoleteAttribute]
class Moon { }

  • 다음은 모든 partial 형식 정의를 통해 함께 병합됩니다.

  • XML 주석

  • 인터페이스

  • 제네릭 형식 매개 변수 특성

  • 클래스 특성

  • 멤버

예를 들어, 다음 선언은

partial class Earth : Planet, IRotate { }
partial class Earth : IRevolve { }

다음과 같습니다.

class Earth : Planet, IRotate, IRevolve { }

partial 클래스 정의를 사용하여 작업할 때는 몇 가지 규칙을 따라야 합니다.

  • 동일한 형식의 일부를 의미하는 모든 partial 형식 정의는 partial을 사용하여 한정해야 합니다. 예를 들어, 다음 클래스 선언에서는 오류가 발생합니다.

    public partial class A { }
    //public class A { }  // Error, must also be marked partial
    
    
  • partial 한정자는 class, struct 또는 interface 키워드 바로 앞에만 사용할 수 있습니다.

  • 중첩된 partial 형식은 partial 형식 정의에 사용할 수 있습니다. 예를 들면 다음과 같습니다.

    partial class ClassWithNestedClass
    {
        partial class NestedClass { }
    }
    
    partial class ClassWithNestedClass
    {
        partial class NestedClass { }
    }
    
    
  • 동일한 형식의 일부를 의미하는 모든 partial 형식 정의는 동일한 어셈블리와 동일한 모듈(.exe 또는 .dll 파일)에서 정의해야 합니다. partial 정의는 여러 모듈에 분산될 수 없습니다.

  • 클래스 이름과 제네릭 형식 매개 변수는 모든 partial 형식 정의에서 일치해야 합니다. 제네릭 형식은 partial이 될 수 있습니다. 각 partial 선언에서는 동일한 매개 변수 이름을 동일한 순서대로 사용해야 합니다.

  • partial 형식 정의에 대한 다음 키워드는 선택적이지만 partial 형식 정의 하나에 이러한 키워드가 있으면 동일한 형식의 다른 parital 정의에 지정된 키워드와 충돌하지 말아야 합니다.

다음 예제에서는 CoOrds 클래스의 필드와 생성자를 partial 클래스 정의 하나에서 선언하고 PrintCoOrds 멤버를 다른 partial 클래스 정의에서 선언합니다.

public partial class CoOrds
{
    private int x;
    private int y;

    public CoOrds(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}

public partial class CoOrds
{
    public void PrintCoOrds()
    {
        System.Console.WriteLine("CoOrds: {0},{1}", x, y);
    }

}

class TestCoOrds
{
    static void Main()
    {
        CoOrds myCoOrds = new CoOrds(10, 15);
        myCoOrds.PrintCoOrds();
    }
}

CoOrds: 10,15

다음 예제에서는 parital 구조체와 인터페이스를 개발하는 방법을 보여 줍니다.

partial interface ITest
{
    void Interface_Test();
}

partial interface ITest
{
    void Interface_Test2();
}

partial struct S1
{
    void Struct_Test() { }
}

partial struct S1
{
    void Struct_Test2() { }
}

자세한 내용은 C# 언어 사양에서 다음 단원을 참조하십시오.

  • 23 Partial 형식

표시: