2010-08-14 2 views
2

정확히 어떤 유형인지 모른 채 내 C# 코드에서 var abc = new { id = 0 };을 사용하고 있습니다!C#에서 "new {id = 0}"유형은 무엇입니까?

개체를 단순히 개체라고 부릅니까? 그것은 특정한 유형의 대상입니까? 내가 var abc = new { id = 0 };이 내가 abc에 필드를 추가 할 수는 name = "david"

답변

9

anonymous type입니다. 즉, 코드에서 사용할 수있는 유형이 없습니다 (컴파일러에서 생성되지만).

MSDN 말한다 :

유형 이름은 컴파일러에 의해 생성 된 소스 코드 레벨에서 사용할 수 없습니다. 당신이 속성을 추가하려면

, 당신은 단순히 그렇게 할 수 있습니다 :

var abc = new { id = 0, name = "david" }; 
+0

downvote 이유를 설명해 주시겠습니까? – Oded

+0

나는 단지 추측 할 수 있지만 실제로는 정확하지 않기 때문일 수 있습니다. 그것은 * 명시 적 형식을 가지고 *, 그것은 형식이 컴파일러에 의해 만들어지고 이름이 없다는 것입니다 (내부적으로 컴파일러를 제외하고). – Guffa

+0

@ Guffa - 아마도 ... 나는 내 대답을 수정하여보다 정확 해졌습니다. – Oded

1

그것은 생성 :

은 내가

빠른 예는 객체의 종류에 필드를 추가하는 방법을 모르는 사촌 알고 싶어 하나의 필드가 id 인 익명의 클래스 객체. 자세한 내용은 msdn을보십시오. 오브젝트 을 생성하면을 확장 할 수 없습니다. 이 클래스는 그래서 일반 클래스에 컴파일 기본적인 차이는이 방법의 범위를 외부에서 사용할 수 없다는 것입니다 그 때 개방

[CompilerGenerated, DebuggerDisplay(@"\{ id = {id} }", Type="<Anonymous Type>")] 
internal sealed class <>f__AnonymousType0<<id>j__TPar> 
{ 
    // Fields 
    [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
    private readonly <id>j__TPar <id>i__Field; 

    // Methods 
    [DebuggerHidden] 
    public <>f__AnonymousType0(<id>j__TPar id); 

    [DebuggerHidden] 
    public override bool Equals(object value); 

    [DebuggerHidden] 
    public override int GetHashCode(); 

    [DebuggerHidden] 
    public override string ToString(); 

    // Properties 
    public <id>j__TPar id { get; } 
} 

.NET 리플렉터

와 모양을

이.