이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 31087|회답: 0

[출처] C# 익명 타입 학습 일지

[링크 복사]
게시됨 2020. 10. 16. 오후 5:41:04 | | | |
복잡한 메서드, 이벤트, 구성자 같은 복잡한 클래스를 정의하고 싶지 않을 때는 -> 익명 타입으로 커스텀 데이터 타입을 동적으로 생성할 수 있습니다.

1. 익명성의 유형을 정의한다

익명 타입을 정의할 때는 var 키워드와 객체 초기화 구문을 사용해야 합니다.

var: 컴파일러가 컴파일 시점에 자동으로 새로운 클래스 정의를 생성합니다(C# 코드에서 클래스 이름은 보이지 않습니다).

초기화: 컴파일러가 새로 생성된 타입에 대해 개인 배경 필드와 (읽기 전용) 속성을 생성하도록 지시합니다.

매개변수를 전달하여 익명 타입을 구성하고 관련 정보를 출력합니다



콜: 익명 타입도 하드코드를 사용해 만들 수 있습니다



2. 익명 타입의 내부 표현

모든 익명 타입은 Object에서 자동으로 상속되기 때문에, 자동차 객체에 ToString, GetHashCode, Equals를 사용할 수 있습니다. 이렇게 호출해 보겠습니다:



판정 및 결과:







car 객체의 타입은 다음과 같습니다: <>f__AnonymousType03 (당신의 것은 다를 수 있습니다), 익명 타입 이름은 컴파일러가 감지하고 간섭할 수 없으며, CIL 코드입니다.

3. 메서드 ToString()과 GetHashCode() 구현.

1.ToString()



2. 해시코드 획득()

각 익명 타입의 변수를 사용하여 System.Collections.Generic.EqualityComparer의 타입 입력으로 해시 값을 계산하며, <T>두 익명 타입이 동일한 속성을 가지고 동일한 값을 부여할 때만 동일한 해시 값을 생성합니다.

4. 익명 타입의 동등 의미

이른()





결과를 분석하세요:

1. Equals(): 컴파일러는 Equals()를 덮어써 값 의미론에 따라 객체가 같은지 판단합니다(예: 두 객체의 각 데이터 멤버의 값을 기록)

2. == 연산자: 익명 타입은 동등한 연산자를 과부하하지 않기 때문이다 (== , !=), == 참조를 비교하지, 내용이 아닌 참조를 비교한다.

3. GetType(): 동일한 어셈블리에서 동일한 속성의 익명 타입 두 개를 선언하면, 컴파일러는 하나의 익명 타입만 정의합니다.

5. 익명 타입을 포함하는 익명 타입



요약:

사실, 익명 타입 사용, 특히 LINQ를 사용할 때는 신중해야 하며, 익명 타입의 등장 때문에 강한 타입 클래스나 구조 사용을 포기해서는 안 됩니다.

사실 익명 타입 자체에도 많은 한계가 있습니다:

  • 익명 타입의 이름을 통제할 수는 없습니다
  • 익명 타입은 System.Object 상속을 받습니다
  • 익명 필드와 속성 유형은 항상 읽기 전용입니다
  • 익명 타입은 이벤트, 커스텀 메서드, 커스텀 연산자, 커스텀 리라이트를 지원하지 않습니다
  • 익명 유형은 암묵적으로 밀봉되어 있습니다
  • 익명 타입의 엔티티 생성은 기본 구성자만을 사용합니다


기능을 정의하지 않고 엔터티의 형태를 빠르게 정의해야 한다면, 익명 타입을 사용할 수 있습니다.




이전의:SQL Server 데이터는 삽입 스크립트로 내보내집니다
다음:.net/C#은 익명이 아닌 함수&lt;&gt;f__AnonymousType0 메서드를 반영합니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com