반응형
C++만 개발하다가 C#으로 서버 개발을 해야지하고 마음을 먹은 다음 C# 기본서를 읽으면서 특별히 기억했으면 해서 그록해 두었던 내용들이네요. 요즘은 첫 언어로 C++보다는 C#을 먼저 접하는 분들이 많지만 예전에는 C#은 더더욱 젋은 언어였었네요.
- 값 타입 & 참조 타입
값 타입: 선언과 동시에 메모리 할당
byte, char, int, long, float, double, decimal, bool, struct, enum
참조 타입 : 선언 후 메모리를 직접 할당 - 참조 변수로 함수 인자 전달(ref, out)
ref : 반드시 초화 하고 전달.
out : 초기화 필요 없다.
void func(ref int x)
void func(out int x) - C#에서 포인터 사용(unsafe 코드)
컴파일 옵션에 /unsafe를 사용해서 컴파일해야 한다.
unsafe void func(int* x) {
*x = 1000;
}
int x=10;
unsafe {
func(&x1);
}
- 메모리 고정(fixed with unsafe)
CLR이 메모리를 이동하지 않도록 보장해준다.
포인터 값을 변경하는 조작을 할 경우 반드시 fixed를 사용해야 한다.
unsafe static void Main() {
...
fixed(int* p = &x) {
func(p)
}
}
- 상속 금지시키기 : sealed
public sealed class Father {
}
- 상속 금지시키기 : sealed
public sealed class Father {
} - 물리 접근 제한자 : internal, protected internal
internal : dll단위로 접근 제한(다른 dll에서 접근 불가)
protected internal : 상속받은 클래스에 한해서 접근 가능하며 internal처럼 이외의 접근은 막힘
class OuterClass {
internal static void Hello() {
}
protected internal static void Hello() {
}
}
- Boxing/UnBoxing
참조 변수만 받는 함수라면 값 타입을 참조 타입으로 변환해주어야 함수를 호출할 수 있기 때문에 생겨남
Boxing : 값 타입 -> 참조 타입
UnBoxing : 참조 타입 -> 값 타입
int a = 1;
object o = p; // Boxing
int b = (int)o; // UnBoxing
- 배열
int[] a = new int[10];
int[,] a = new int[3,2];
- 가변 배열
각 요소마다 크기를 다르게 줄 수 있다.
int[][] a = new int[3][];
a[0] = new new int[2];
a[1] = new new int[1];
a[2] = new new int[3];
- 인덱서
클래스 객체나 구조체 변수를 배열 형식으로 사용할 수 있게 한다
class A {
public object this[int index] {
get { }
set { }
}
}
- 스트링 특수 문자 그대로 받기
sting str = @"c:\csharp\";
'게임 개발 > 게임 서버 프로그래밍' 카테고리의 다른 글
RPG 게임 이동 동기화 스트레스 테스트 봇 (0) | 2021.11.02 |
---|---|
TCP 3/4 Way-handshake (0) | 2021.08.30 |
Overlapped IO, IOCP (0) | 2020.07.13 |
네비게이션 메쉬 + A* (Navigation Mesh + AStar) (1) | 2019.11.03 |