* 중첩 클래스
class A{
...
...
class B{
...
}
}
// 이 형태에서 class b는 class a의 private에 접근이 가능함.
// 보통 내부 메소드에서 private 필드에 접근하는 것과 같음
* 분할 클래스
particial class a{
...
}
particial class b{
...
}
// 두 개의 클래스를 하나의 클래스처럼 사용해도 됨
// 대신 함수가 중복되면 안됨
* 확장 메소드
// 기존에 있는 메소드를 재정의해서 기능을 변경하는 것인데 새로운 함수를 만드는 것이 낫다.
* 구조체
struct Point3D
{
public int X;
public int Y;
public int Z;
public Point3D(int X, int Y, int Z)
{
this.X = X;
this.Y = Y;
this.Z = Z;
}
public override string ToString() // 이건 .tostring()의 재정의 한 것
{
return string.Format("{0}, {1}, {2}", X, Y, Z);
}
}
class MainApp
{
static void Main(string[] args)
{
Point3D p3d1; // new 없이 선언 가능
p3d1.X = 10;
p3d1.Y = 20;
p3d1.Z = 40;
Console.WriteLine(p3d1.ToString());
Point3D p3d2 = new Point3D(100, 200, 300); // new로 생성시는 생성자 사용한거다 -_-
Point3D p3d3 = p3d2; // 깊은 복사
p3d3.Z = 400;
Console.WriteLine(p3d2.ToString());
Console.WriteLine(p3d3.ToString());
}
}
// 구조체와 클래스의 비교
- 선언 : 구조체는 new 필수x (new가 있는 경우는 생성자 사용할 때), 클래스는 필수o
- 형식 : 구조체는 값 형식, 클래스는 참조 형식
- 복사 : 구조체는 깊은 복사, 클래스는 얕은 복사
- 생성자 : 구조체는 매개변수 없이 생성자 (x), 클래스는 매개변수없이 생성자 (o)
// 결론적으로 구조체는 스택에 저장됨. 그래서 깊은 복사가 가능함.