정확히 어떤 유형인지 모른 채 내 C# 코드에서 var abc = new { id = 0 };
을 사용하고 있습니다!C#에서 "new {id = 0}"유형은 무엇입니까?
개체를 단순히 개체라고 부릅니까? 그것은 특정한 유형의 대상입니까? 내가 var abc = new { id = 0 };
이 내가 abc
에 필드를 추가 할 수는 name = "david"
정확히 어떤 유형인지 모른 채 내 C# 코드에서 var abc = new { id = 0 };
을 사용하고 있습니다!C#에서 "new {id = 0}"유형은 무엇입니까?
개체를 단순히 개체라고 부릅니까? 그것은 특정한 유형의 대상입니까? 내가 var abc = new { id = 0 };
이 내가 abc
에 필드를 추가 할 수는 name = "david"
anonymous type입니다. 즉, 코드에서 사용할 수있는 유형이 없습니다 (컴파일러에서 생성되지만).
MSDN 말한다 :
유형 이름은 컴파일러에 의해 생성 된 소스 코드 레벨에서 사용할 수 없습니다. 당신이 속성을 추가하려면
, 당신은 단순히 그렇게 할 수 있습니다 :
var abc = new { id = 0, name = "david" };
그것은 생성 :
은 내가
이빠른 예는 객체의 종류에 필드를 추가하는 방법을 모르는 사촌 알고 싶어 하나의 필드가 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 리플렉터
와 모양을이.
downvote 이유를 설명해 주시겠습니까? – Oded
나는 단지 추측 할 수 있지만 실제로는 정확하지 않기 때문일 수 있습니다. 그것은 * 명시 적 형식을 가지고 *, 그것은 형식이 컴파일러에 의해 만들어지고 이름이 없다는 것입니다 (내부적으로 컴파일러를 제외하고). – Guffa
@ Guffa - 아마도 ... 나는 내 대답을 수정하여보다 정확 해졌습니다. – Oded