2011-02-10 3 views
20

를 박스형 있습니까? 상상할 수는 없지만 전문가에게 물어보고 싶습니다.C 번호는 내가 가지고있는 경우 동적 매개 변수

+2

왜 그렇게 생각하지 않습니까? 런타임이 * 알 수없는 컴파일 타임 타입 *을 객체로 저장하지 않는다면 어떻게 저장하고 있다고 생각합니까? (이것은 수사학적인 질문이 아니며 사람들의 직관력으로 인해 언어 기능에 대한 거짓된 것들을 믿게 만들어 미래에 더 나은 기능을 설계 할 수 있도록하는 데 관심이 있습니다.) –

+0

C# 팀에 있습니까? 제 편에는 정당한 가정이 아닙니다. C#에 추가 된 놀랍도록 멋진 기능을 사용하면 C#이 정적으로 형식화 된 언어라는 것을 쉽게 잊을 수 있습니다. 따라서 C#이 숨겨진 개체가 될 수는 없습니다. C# 팀에 있다면 람다 식을 이용해 주셔서 감사합니다. 최고의 언어 기능. –

+2

@ Adam : 천만에요. 나는 람다 식을 아주 많이 구현하는 것을 즐겼고 당신이 그들을 사용하는 것을 즐겁게하고있어 기쁩니다! –

답변

14

예, 가능합니다.

dynamic 유형은 일부 메타 데이터가있는 object 일 뿐이므로 변수 유형, 필드 또는 dynamic 유형의 매개 변수에 입력 할 때 값 유형이 박스로 표시됩니다.

방법은 실제로로 컴파일됩니다

void Foo([Dynamic] object X) 
{ 
} 

DynamicAttribute here에 대해 자세히 알아보십시오. 를 호출하는 코드에 대한

IL :

.method private hidebysig static void Main(string[] args) cil managed 
{ 
    .entrypoint 
    .maxstack 8 
    L_0000: nop 
    L_0001: ldc.i4.s 12 
    L_0003: box int32 
    L_0008: call void ConsoleApplication13.Program::Foo(object) 
    L_000d: nop 
    L_000e: ret 
} 
+0

나는 그 대답이 될 가라 앉는 느낌이 들었다. 고맙습니다. –

1

예. 확인을 입력하려면 값 유형을 박스로 묶어야합니다.

0

예!

값 유형이므로 boxed됩니다.