본문 바로가기

[MSIL] 런타임 property 구현하기 1. '_propertyName' 이름을 가지는 backing field를 만든다. ( C# 컴파일러가 만들어내는 실제 backing field 이름은 이것과 다르다 )2. 'get_propertyName' 이름을 가지는 getter 메소드를 만든다. 메소드가 MethodAttributes.SpecialName 속성을 가지는것을 기억하자.3. 'set_propertyName' 이름을 가지는 setter 메소드를 만든다. setter는 1개의 파라미터를 가진다. (value) 더보기
[MSIL] beforefieldinit beforefieldinit는 타입이 초기화(정적 생성자, cctor)되는 시점을 슈퍼-레이지하게 만들어준다. 슈퍼 레이지하다는것은, 스태틱 메소드중에 필드에 접근하지 않는 애는 호출이 되어도 초기화를 스킵한다는 뜻이다. 위 코드에서 PrintHello는 그냥 HelloWorld만 출력한다. 반면에 PrintHelloWithField는 HelloWorld를 찍은 뒤, 굳이 필드에 일부러 접근하는 동작을 가진다. 마지막으로 정적 생성자가 호출되는 시점을 알 수 있도록 CCTOR라는 메세지를 출력하도록 했다. 위의 코드를 실행하면 단순히 HelloWorld가 출력되는 모습을 볼 수 있는데, 이는 Foo 클래스는 beforefieldinit 속성을 가지고있기 때문에 PrintHello를 불러도 정적 생성자가 .. 더보기
[MSIL] for loop 첫번째 인자로 넘어온 int 숫자만큼 반복하는 메소드그냥 x86 어셈블리 지식을 더듬어 혼자 짠 코드라, 제대로된 C# 컴파일러가 빌드하는 코드와는 다를 수 있다. 더보기