본문 바로가기

프로그래밍/C# 프로그래밍

파티셜 클래스와 파티셜 메소드

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()
    {
        Console.WriteLine("CoOrds: {0},{1}", x, y);
    }

}

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

    }
}
// Output: CoOrds: 10,15

C# 에서는 이렇게 partial 이라는 키워드를 사용하여

클래스의 필드와 메소드를 분할할 수 있다.






그리고 메소드 또한 분할할 수 있는데..




public partial class Item

{

    public void SetItem()

    {

        Equip()

    }


    partial void Equip();

}


public partial class Item

{

    partial void Equip()

    {

        Log("Equip Complete);

    }

}


이런식으로 선언부와 정의부를 나눌 수 있다.


선언부만 있고, 정의부가 없다면 아예 그 함수 자체를 없애 버린다.


만약의 여러파일로 나누어 선언부, 정의부 이렇게 구분할 수 있다면 좋긴할텐데


C# 에서는 헤더파일이라는 개념이 없기 때문에 불가능하다;





마지막으로 파티셜 메소드에는 몇가지 제약과 특징이 있는데, 다음과 같다.



* 당연히 partial 키워드로 시작해야 하며 리턴형은 void 이다.


* ref 매개변수는 사용가능하며 out 매개변수는 사용할 수 없다.


* private 타입만 가능하며 virtual 이 될 수 없다.


* extern 이 될 수 없다.


* static, unsafe 도 사용할 수 없다.


* 제너릭 메소드는 가능하다. 


* 정의부 구현부에서 델리게이트는 사용가능 하나 정의부만 있는 곳에서는 사용 불가능