2012-01-18 6 views
1

익명 형식은 두 가지 방법으로 메모리를 소비 할 수 있습니다.익명 변수 읽기 전용 경우

첫번째 방법

public MyAdd MyFunc() 
     { 
      return new MyAdd 
      { 
       name = "Mike", 
       Address = "MyTown" 
      }; 
     } 


var x = MyFunc(); 

번째 방법

x = new { name = "Mike", Address = "MyTown" }; 

두 문장의 차이는 c.name는 전자의 경우에는 읽기 전용이며 이후에 modifyable 있다는 케이스.

제 질문은 두 가지 경우 모두 마침내 익명 형식이 일부 값을 소비하므로 왜 구조의 경우 읽기 전용이 아닌지입니다. 이것에 대한 내부 메커니즘이 있습니까?

+0

처음에는 익명의 형식이 아닌 ... MyAdd 형식입니다. 익명 형식이 아니기 때문에 값과 속성을 설정할 수 있습니다. –

답변

1

아니요, 첫 번째 경우는 이 아니며 익명 유형을 사용하는 사람은입니다. 첫 번째 코드는 다음과 같습니다.

var tmp = new MyAdd(); 
tmp.name = "Mike"; 
tmp.Address = "MyTown"; 
return tmp; 

추가 유형이 도입되지 않았습니다. 나는 그것을 알고있다 익명 객체 창조 표현 또는 익명 객체 이니셜 라이저 (그 spec은 사용하는 용어이다)에 대한 문법처럼을 보지만 실제로는 기존의 유형을 사용하고있다. 이것은 객체 이니셜 라이저를 사용하는 객체 생성 표현식입니다. 여기에는 익명 성이 없습니다.

자세한 내용은 C# 4 사양의 섹션 7.6.10.1 및 7.6.10.2를 참조하십시오.

+0

위의 섹션에 대한 링크를 공유하십시오 – Pankaj

+0

@StackOverflowUser :이 사양은 쉽게 링크 할 수있는 특히 유용한 양식으로 온라인 상태는 아니지만 다운로드 할 수 있습니다 : http://download.microsoft.com/download/ 0/B/D/0BDA894F-2CCD-4C2C-B5A7-4EB1171962E5/CSharp % 20Language % 20Specification.doc (http://csharpindepth.com/Articles/Chapter1/Specifications.aspx에서 링크가있는 사양 목록을 보관합니다) –

+0

@PankajGarg : 이것을 받아들이지 않는 이유는 무엇입니까? 제가 도와 드릴 수있는 더 많은 정보가 있습니까? –