C# 부분클래스, 부분메소드, partial class partial method, C#학원, C#교육, C#동영상, 닷넷교육, 닷넷학원, 닷넷동영상

https://www.youtube.com/watch?v=eTOLfYyCnlE&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=12

https://www.youtube.com/watch?v=zBOKgEgBINI&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=11

https://www.youtube.com/watch?v=LrDRiOEeSSI&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=10

C# partial 클래스
- C# 2.0 이상에서 partial class는 여러 개의 파일에 하나의 클래스를 분리하여 만들거나 하나의 파일에 여러 클래스를 만들 수 있는 방법을 제공한다.
- 윈폼등에서 폼을 생성하면 기본적으로 자동으로 만들어 주는 개발자가 손댈 필요가 없는 디자인 요소의 파일(Form1.Designer.cs) 코드와 개발자가 작성하는 C# 코드(Form1.cs)를 분리하여 C# 개발자는 C# 비하인드 코드 개발에 집중할 수 있도록 해주며, 컴파일러가 분리된 partial class를 하나의 클래스로 합쳐준다.
- 대형 프로젝트를 진행하는 경우 클래스를 개별 파일로 분할하면 여러 프로그래머가 동시에 작업을 수행할 수 있다.
하나의 파일에 Emp 클래스를 나누어서 정의하는 경우
using System;
namespace ConsoleApplication7
{
partial class Emp
{
public void gotoOffice()
{
Console.WriteLine("출근합니다.");
}
}
partial class Emp
{
public void Work()
{
Console.WriteLine("일합니다.");
}
}
partial class Emp
{
public void getoffWork()
{
Console.WriteLine("퇴근합니다.");
}
}
class MainTest
{
static void Main()
{
Emp e = new Emp();
e.gotoOffice();
e.Work();
e.getoffWork();
}
}
}
//------------------------------------------------------
서로 다른 파일에 Emp 클래스를 나누어서 정의하는 경우
[Program.cs]
using System;
namespace ConsoleApplication2
{
partial class Emp
{
public int id;
public string name;
}
class Program
{
static void Main()
{
Emp e1 = new Emp();
e1.id = 1; e1.name = "1길동";
Console.WriteLine(e1);
Console.WriteLine(e1.ToString());
Emp e2 = new Emp()
{
id = 2,
name = "2길동"
};
Console.WriteLine(e2);
}
}
}
[Program2.cs]
using System;
namespace ConsoleApplication2
{
partial class Emp
{
public override String ToString()
{
return "[사원]id=" + id + ",name=" + name;
}
}
}
C# partial 메소드
- partial 클래스의 한쪽(추상클래스)에서는 메소드의 선언만 하고, 다른쪽 partial 클래스(구현 클래스)에서 메소드를 구현할 수 있다. 만약 개발자가 구현을 하지 않는다면 컴파일러는 컴파일 시점에 해당 partial 메소드 빼고 컴파일 한다.
- partial 메소드를 작성하기 위해서는 partial로 메소드가 시작되어야 하며, 선언과 정의 타입이 일치해야하며, void를 리턴하도록 해야 하며, out 매개변수, virtual, override, sealed등이 없으며, 접근 지정자는 없다(private이 기본).
namespace PartialTest
{
partial class Hello
{
public string name = "";
public Hello()
{
SayHello("홍길동");
}
partial void SayHello(string name);
}
partial class Hello
{
partial void SayHello(string name)
{
this.name = name;
}
}
class Test
{
static void Main()
{
Hello h = new Hello();
Console.WriteLine("Hello ~ " + h.name);
}
}
}