C\#dynamic 키워드 사용 방법

4594 단어 dynamic키워드
C\#는 유형의 안전 한 프로 그래 밍 언어(모든 표현 식 은 특정한 유형의 인 스 턴 스 로 해석 할 수 있 고 컴 파일 러 가 생 성 한 코드 에서 이 유형 에 대한 효과 적 인 조작 만 수행 합 니 다)입 니 다.비 유형 안전 한 언어 에 비해 유형 안전 의 장점 이 나타 납 니 다.1.많은 오 류 는 컴 파일 할 때 검 측 될 수 있 습 니 다.보증 코드 가 실행 되 기 전에 정확 합 니 다.2.컴 파일 할 때 언어 는 보통 더 작고 빠 른 코드 를 생 성 할 수 있다.(컴 파일 할 때 더 많은 가설 을 하고 IL 과 메타 데이터 에서 그 가설 을 실현 합 니 다)개발 자 들 이 반사 또는 기본 구성 요소 와 통신 하 는 데 편리 하도록 다이나믹 이 탄생 했 습 니 다!코드 는 String 목표("내 가 유형 을 찾 습 니 다")에 반사 되 는 방법("Contains")을 사용 하여 실제 인삼("나 는 string 매개 변수 일 뿐 입 니 다")을 전달 하고 결 과 를 부분 변수 result 에 저장 하 는 방법 을 보 여 줍 니 다.

static void Main()
        {
            object target = " ";
            object arg = " string ";
            Type[] argtype = new Type[] { arg.GetType()};
            System.Reflection.MethodInfo method = target.GetType().GetMethod("Contains", argtype);

            object[] argm = new object[] { arg};
            Boolean result=Convert.ToBoolean(method.Invoke(target,argm));
}

이제 dynamic!

static void Main()
        {
            dynamic target = " ";
            dynamic arg = " ";
            Boolean result = target.Contains(arg);
}
현저 한 간소화 가 발견 되 었 습 니까?4567913)다이나믹 의 신기 함 을 보 았 으 니 다시 한 번 꼬치 꼬치 캐 어 봅 시다.필드,속성/색인 기,방법,의뢰,1 원/2 원/변환 연산 자 등 다이나믹 표현 식 이나 변 수 를 사용 하여 구성원 을 호출 할 수 있 습 니 다.코드 가 다이나믹 표현 식 이나 변 수 를 사용 하여 구성원 을 호출 할 때 컴 파일 러 는 특수 한 IL 코드 를 생 성하 여 필요 한 동작 을 설명 합 니 다.이 특수 한 코드 는 payload(유효 부하)라 고 합 니 다.이 예 를 들 어

static void Main()
        {
            Application excel = new Application();
            excel.Visible = true;
            excel.Workbooks.Add(Type.Missing);
            ((Range)excel.Cells[1, 1]).Value = https://www.jb51.net/smailxiaobai/archive/2011/11/25/" ";// dynamic ,excel.Cells[1,1] objec , Rang Value 。
            excel.Cells[1, 1].Value = https://www.jb51.net/smailxiaobai/archive/2011/11/25/" ";// COM “ ” ,COM variant dynamic, (dynamicfication)。
            // excel.Cells[1,1] dynamic , Range Value。 COM 。
        }
필드 형식,방법 매개 변수 유형 이나 방법 유형 이 다이나믹 으로 지정 되 는 전제 에서 컴 파일 러 는 이 유형 을 System.Object 로 바 꾸 고 메타 데이터 에서 필드,매개 변수 또는 형식 으로 System.Runtime.Compiler Sevices.Dynamic Attribute 의 인 스 턴 스 를 되 돌려 줍 니 다.부분 변수 가 dynamic 로 지정 되면 변수 유형 도 Object 가 되 지만 부분 변수 에 Dynamic Attribute 를 적용 하지 않 고 사용 을 방법 으로 제한 해 야 합 니 다.다이나믹 은 object 이기 때문에 다이나믹 을 object 로 만 들 거나 object 를 다이나믹 으로 만 들 면 두 가지 다른 방법 으로 서명 할 수 있 습 니 다.예:

        static void Main()
        {
            for (int i = 0; i < 2; i++)
            {
                dynamic arg = (i == 0) ? (dynamic)10 : "A";
                dynamic result = plus(arg);// i==0 ,arg=10; plus , int 。 string 。
                M(result);//payload M , 。
            }
          Console.ReadKey();
        }
        static dynamic plus(dynamic arg) { return arg+arg;}
        static  void M(int n) { Console.WriteLine("M(int):{0}", n); }
       static void M(string s) { Console.WriteLine("M(string):{0}", s); }
    }
이것 은 번역 에 통 하지 않 는 다.dynam 의 유형 변환:

  object dd(dynamic i) { return i; }
 dynamic dd( object i) {return i; }
dynamic 과 var 의 차이 점:1.var 는 부분 변 수 는 간단 한 문법 일 뿐 컴 파일 러 가 표현 식 에 따라 구체 적 인 데이터 형식 을 추정 하도록 요구 합 니 다.2.var 는 설명 방법 내부 의 부분 변수 에 만 사용 할 수 있 고 다이나믹 은 부분 변수,필드,매개 변수 에 사용 할 수 있 습 니 다.3.표현 식 은 var 로 바 꿀 수 없 지만 다이나믹 으로 바 꿀 수 있 습 니 다.4.var 로 설명 하 는 변 수 를 명시 적 으로 초기 화 해 야 하지만 dynam 으로 설명 하 는 변 수 를 초기 화 할 필요 가 없습니다.dynamic 를 사용 할 때 주의해 야 합 니 다.실행 할 때 Microsoft.상어 p.dll 은 AppDomain 에 불 러 와 야 합 니 다.이번 에는 프로그램의 성능 을 손상 시 키 고 내부 오류 소 모 를 증가 시 킵 니 다.Microsoft.상어 p.dll 은 System.dll 과 System.Core.dll 을 불 러 옵 니 다.dynamic 를 사용 하면 System.dynamic.dll 을 불 러 옵 니 다.payload 코드 가 실 행 될 때 동적 코드 를 생 성 합 니 다.이 코드 들 은 메모리 에 있 는 프로그램 집합 에 들 어 갑 니 다."익명 하 숙 된 DynamicMethods 프로그램 집합"(Anonymously Hosted DynamicMethods Assembly)이 라 고 합 니 다.같은 런 타임 형식의 dynamic 실 참 을 사용 하여 대량의 호출 을 보 냈 을 때 이 코드 는 스케줄 링 성능 을 향상 시 킬 수 있 습 니 다.dynamic 는 문법 을 간소화 할 수 있 지만 동적 값 구하 기 기능 이 발생 하 는 추가 비용 도 무시 할 수 없다.왜냐하면 모든 프로그램 집합 과 추가 메모리 소 모 를 불 러 오 면 성능 에 추가 적 인 영향 을 미 칠 수 있 기 때문이다.프로그램 에서 한두 군데 만 동태 적 인 행동 이 필요 하 다 면 전통 적 인 방법 이 더욱 효율 적일 수 있다.

좋은 웹페이지 즐겨찾기