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와 다른 블로그이와 같다에서 찾을 수 있다.이것은 필자의 첫 번째 문장이기 때문에 부족한 점은 독자 여러분께서 많이 지적하여 주시고 다음 문장을 기대해 주십시오.참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.