C# dynamic 키워드 탐색(1) - 소개

3383 단어 c#

C# 4에는 새로운 유형의 dynamic이 도입되었습니다.이 형식은 정적 형식이지만,dynamic의 대상은 정적 형식 검사를 건너갑니다."
——Microsoft Docs[1]

정적 동적

dynamic는 C# 4에 추가된 새 컨텍스트 키워드로, 동적 유형을 나타냅니다.우리는 임의의 대상을 부여할 수 있는dynamic 형식의 변수를 직접 만들 수 있습니다.다음과 같습니다.
dynamic dynVar1 = 1;
dynamic dynVar2 = new Object();

코드에서 dynamic 형식을 사용했을 때, 컴파일러가 이 대상에 대한 실행을 닫을 때 검사하고, 실행할 때 대상 형식을 확인하도록 알려 줍니다.예를 들어, 다음 코드를 성공적으로 컴파일할 수 있습니다.
dynamic numericDyn = 80;
numericDyn.Greet();

그러나 이 코드는 실행 중 이상RuntimeBinderException을 던져서 유형int에 방법Greet()의 정의가 포함되지 않음을 알립니다.이것은 밑바닥에서dynamic 변수 유형이 운행할 때 여전히 확정되어 있음을 나타낸다. 즉, C#는 여전히 정적 유형화 언어이다.우리가 dynamic 변수에서 GetType()를 호출할 때, 이 대상의 실제 유형을 출력합니다.다음과 같습니다.
Console.WriteLine(numericDyn.GetType());
// Console prints System.Int32

주의해야 할 것은 dynamic 유형의 변수를 사용할 때 컴파일러는 이 변수가 가리키는 대상을 어떤 유형으로도 추정할 수 없고 방법과 속성을 일일이 열거할 수 없다는 것이다.따라서 IntelliSense 및 재구성 도구는 이때 비활성화됩니다.
아래의 이 예는 이 점을 명확하게 설명할 수 있다.우리는 우선 클래스를 만들고 dynamic 형식 변수로 Cat 대상의 인용을 불러오고 Cat 중의 방법을 재구성하려고 합니다.전체 코드:
using System;

namespace DynamicKeywordTest
{
    class Program
    {
        static void Main(string[] args)
        {
            dynamic dynCat = new Cat();
            dynCat.Meow();
        }

        class Cat
        {
            public void Meow()
            {
                Console.WriteLine(String.Format("Cat {0} meows.", this.GetHashCode()));
            }
        }
    }
}
Visual Studio의 재구성 도구를 사용하여 방법Meow()Honk()으로 이름바꾸었습니다.dynCat.Meow()는 변경되지 않았습니다.

var, object 및 dynamic


키워드 var 는 컴파일할 때 형식 추정에 사용됩니다.컴파일러가 컴파일할 때 var 대표적인 유형을 자동으로 정합니다.다음 코드는 다음과 같습니다.
var varInt = 1;
var varStr = "Hello, Vars!";

최적화 컴파일을 닫고 .NET Reflector 역컴파일을 사용하여
int num = 1;
string str = "Hello, Vars!";

이 키워드는 컴파일할 때 유형 정보를 얻을 수 있기 때문에 IntelliSense와 재구성할 수 있습니다.
유형object은 모든 대상의 기류로 dynamic와 비슷한 용법을 가지지만 강제 전환을 해야만 하위류의 방법, 속성 등을 사용할 수 있다.예:
object objCat = new Cat();
objCat.Meow(); // CS1061 'object' does not contain a definition of 'Meow'
((Cat)objCat).Meow(); // OK

dynamic dynCat = new Cat();
dynCat.Meow(); // OK, but no IntelliSense

이러한 키워드는 다음과 같이 혼용할 수 있습니다.
dynamic dynObj = new Object();
var anotherObj = dynObj;

최종적으로dynObj유형은dynamic,anotherObj유형은dynamic이다.

결어


본고는 dynamic 키워드에 대한 첫 번째 탐색일 뿐이고 더 많은 정보는 Microsoft Docs와 다른 블로그이와 같다에서 찾을 수 있다.이것은 필자의 첫 번째 문장이기 때문에 부족한 점은 독자 여러분께서 많이 지적하여 주시고 다음 문장을 기대해 주십시오.

참고 자료

  • Using type dynamic (C# Programming Guide) (Microsoft Docs)
  • C# 4의 Dynamic 키워드(블로그 정원) 이해
  • 좋은 웹페이지 즐겨찾기