[좋은 글 공유] 화이트 C#: 반사

4523 단어
[좋은 글 공유] 화이트 C#: 반사
반사 는 늦은 귀속 으로 개발자 가 더 유연성 있는 코드 를 설계할 수 있고, 그 대가 는 더 많은 시스템 자원 비용 을 써서 응용 프로그램 이 실행될 때 알 수 없는 정보 를 얻을 수 있도록 하는 것 이다.
말하자면 코드를 작성할 때 개발자는 아직 대상의 정보를 모르거나 확정할 수 없기 때문에 결정권을 코드 자체에 맡기고 장래에 필요할 때 코드 자체가 이 정보를 얻고 판단하며 상응하는 반응을 할 것이다.이런 방식은 코드를 더욱 유연하게 할 수 있지만 반사를 사용하려면 성능과 유연성 사이의 균형을 잘 고려해야 한다. C#이 반사 메커니즘을 제공했다고 해서 맹목적으로 사용해서는 안 된다. 우리는 John Carmack이'PC기 3D 이미지 성능을 짜내는'정신을 발양해야 한다. 하드웨어가 점점 싸진다고 해서 기계가 무거운 짐을 지고 의미가 없는 일을 하지 말아야 한다.
우리는 이 시리즈의 일관된 스타일을 계속하여 생활 속의 예로 반사와 반사의 기본적인 사용 방식을 설명한다.
먼저 여러분께 한 가지 여쭙겠습니다. "집결호에서 곡식으로 입은 남조선 군복은 어디에서 왔습니까?"분명히 임시로 재봉사를 찾아 만든 것이 아니라 포로에게서 벗겨진 것이 틀림없다.자, 그럼'집결호'의 장면을 보충해서 반사가 무엇인지 봅시다.
어느 날 저녁, 굶주리고 목마른 남조선 낙오병 한 명이 시골길을 비틀거리며 걷고 있었다. 그는 심지어 출발하는 총을 메지 못할 지경이었다. 대오가 어디에 있는지도 모르고, 어쩔 수 없이 한 방향을 정확히 알고 열심히 찾았다."움직이지 마!"길가의 풀숲에서 뛰어나온 매복해 있는 중국 병사 두 명이 소리를 질렀다. 이 남조선 병사는 본래 기진맥진했는데 어떻게 이런 놀라움을 견뎌 당시 바닥에 털썩 주저앉았다.중국 병사들은 그를 캠프로 압송하고 상부에 보고했다. 그들은 부근을 순찰하던 중 의외로 남조선에서 낙오된 병사 한 명을 포로로 잡고 처리를 기다리고 있었다.
이 일은 왕 단장에게 보고되었다. 왕 단장은 확대경을 들고 몇 명의 장교와 지도 앞에서 작전 방안을 연구하고 있었다. 이 일을 듣고 느릿느릿 그의 옆에 있는 고 중대장에게 말했다. "고성아, 네가 가서 봐라. 큰 문제가 없으면 후방 포로수용소로 보내라.""네!"고 중대장은 명령을 받고 몸을 돌려 나갔다.
고중대장이 좁은 방에 도착하자 남조선 병사가 반쯤 누워 있었다. 손에 중국 병사가 준 만두와 물을 들고 한 입 한 입 씹고 있었다. 고중대가 들어오는 것을 보고 눈에는 긴장과 두려움의 표정이 드러났다.고 중대장은 포로를 잘 대하는 중국 측의 정책을 간단히 소개하고 그를 심문하기 시작했다. 주의, 반사 시작!
"어디에요?"유엔군 이승만계 부대 3연대 2소대 1반.
"이름이 뭐예요?""스미다."
'이번에 무슨 미션 수행해요?'귀군 진지에 잠입하여 포병을 인도하여 사격을 진행하다.
……
부드러운 것과 강한 것을 동시에 사용한 후 고 중대장은 이 소병의 모든 정보를 파악하고 재료를 정리하여 왕 단장에게 보고하러 갔다. 그러나 이 소병은 작은 방으로 데리고 가서 계속 만두를 뜯어먹었다. 몸의 행두도 바뀌었고 포로를 위해 준비한 솜옷으로 갈아입었다.
고중대장은 한 손에는 기록자료를 들고, 한 손에는 남조선 병사들의 행두를 모두 들고 왕단장을 만나러 갔다.보고를 한 후 왕 단장은 마음속으로 웃었다.'소고야, 좋아. 너희 아버지가 처음에 너를 나한테 맡겼으니 안심하라고 했어. 너는 좋은 재료야. 어때. 내 말이 틀리지 않았지. 허허. 하지만 너는 교만하지 마. 우리는 적을 얕잡아 볼 수 없어. 그러면 너는 이 행수를 가지고 곡식밭을 찾아가서 그에게 바꿔서 밤새 적의 진지로 잠입하라고 해. 적들이 포탄으로 우리를 치려고 하잖아. 그러면 우리가 그들의 방식으로 먼저 사람을 제압해서 골짜기가 내일 아군의 포화를 이끌도록 하자.새벽에 총공격을 개시하다.
곡식은 이 양행두로 갈아입고 담배 반쪽을 지고 출발했다. 그는 적의 진지에 잠입한 후 냉정하게 적의 망원경을 꺼내 주도면밀하게 관찰했고 라디오를 통해 후방 아군에게 사격 파라미터를 전달하여 아군을 성공적으로 이끌어 이번 중대한 승리를 거두었다.
위의 줄거리를 좀 많이 묘사했으니 얼른 코드를 봅시다. 우선 재수 없는 남조선 병사가 도입을 해야 합니다.
   1: namespace UN
   2: {
   3:     internal class SouthKoreaArmy
   4:     {
   5:         public string Name { get; set; }
   6:  
   7:         public string Search(string destination)
   8:         {
   9:             return "OK, fire!";
  10:         }
  11:     }
  12: }

그리고 우리는 코드로 곡식밭에서 이루어진 행동을 실현한다.
   1: internal class ChineseArmy
   2: {
   3:     public static void Action(object soldier)
   4:     {
   5:         Type type = soldier.GetType();
   6:         object ziDiGu = Activator.CreateInstance(type);
   7:         MethodInfo methodInfo = type.GetMethod("Search");
   8:  
   9:         Console.WriteLine(methodInfo.Invoke(ziDiGu, new object[] { "Position" }));
  10:     }
  11: }

이 코드는 잘 이해된다. 5행에서 우리는 포로로 잡힌 남조선 병사를 심문하고 그가 제공한 정보와 복장을 얻은 후에 골짜기를 그의 복장으로 남조선 병사로 변장시켰다.일곱 번째, 샘플, 너는 나를 정찰하고 싶지 않니, 좋아, 우리 이빨로 이빨을 돌려주고, 너의 방식으로 너를 해치우자!이어 곡식밭은 지방 진지로 잠입해 아군의 총공격을 이끌었다.
여기에 반사된 일부 기본적인 응용, 예를 들어 유형 정보를 얻거나 얻은 유형의 동적 생성 대상을 이용하여 그 방법을 동적 호출하는 것을 보여 준다.물론 반사 메커니즘이 할 수 있는 일은 이 몇 가지가 아니지만 목표는 똑같다. 프로그램 자체가 정보를 얻고 반응하는 것이다.성능 비용을 걱정할 필요가 없는 상황에서 반사는 당신의 프로그램을 더욱 유연하고 강력하게 할 수 있습니다!

좋은 웹페이지 즐겨찾기