게임 개발/게임 서버 프로그래밍

C++ 프로그래머가 알아야할 C# 기능 요약

지노윈 2019. 11. 5. 15:00
반응형

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\";