명명된 형식과 익명 형식 비교(Visual Basic)

익명 형식의 인스턴스를 선언할 때 사용하는 형식은 개체 이니셜라이저를 사용하여 명명된 형식의 인스턴스를 선언할 때 사용하는 형식과 비슷합니다. 그러나 결과에는 중요한 차이가 있습니다.

선언

다음 예제에서 product1은 익명 형식의 인스턴스이고 product2는 Product 클래스의 인스턴스입니다. 두 가지 선언 모두에 초기화 목록을 사용합니다. 두 가지 선언 간의 유일한 구문상의 차이점은 product1의 New 다음에 데이터 형식이 지정되지 않는다는 점입니다. 이로 인해 익명 형식이 되는 것입니다.

' Variable product1 is an instance of an anonymous type.
Dim product1 = New With {.Name = "paperclips", .Price = 1.29}

product1 변수는 익명 형식의 인스턴스로서 강력한 형식입니다. 컴파일러는 사용자가 선언에 지정한 속성에 따라 형식을 정의합니다. 컴파일러는 지역 형식 유추(Visual Basic)를 사용하여 사용자가 제공한 초기 값으로부터 속성의 데이터 형식을 확인합니다. 이 예제에서 익명 형식은 Name 및 Price 속성이 포함되어 있고 이 속성들의 형식은 각각 String 및 Double로 유추됩니다.

참고

앞부분의 예제에서 키 속성으로 지정된 속성은 없습니다. 따라서 속성은 같은 형식의 두 인스턴스가 동일한지 여부를 판별하거나 인스턴스의 해시 코드 값이 무엇인지 판별하는 데 아무런 역할을 하지 않습니다. 그러나 키 속성 값은 읽기 전용인데 반해 속성 값은 변경될 수 있습니다. 키 속성에 대한 자세한 내용은 익명 형식(Visual Basic)을 참조하십시오.

다음 예제에서 product2는 Product 클래스의 인스턴스로서 강력한 형식입니다. Name 및 Price 모두 Product 클래스의 멤버여야 하고 이들의 형식은 선언에 제공한 값과 호환되어야 합니다.

' Variable product2 is an instance of Product.
Dim product2 = New Product With {.Name = "paperclips", .Price = 1.29}

자세한 내용은 개체 이니셜라이저: 명명된 형식과 익명 형식(Visual Basic)을 참조하십시오.

차이점

다음 목록에서는 두 가지 선언의 다른 측면을 비교합니다.

  • 지역 형식 유추는 product1이 익명 형식의 인스턴스이고 product2는 Product 클래스의 인스턴스임을 확인합니다. product2의 경우 As 절이 선택적이기는 하나 어느 쪽 선언에도 As 절은 없습니다.

    • 익명 형식에는 지정된 이름이 없으므로 As 절을 사용하여 product1을 선언할 수 없습니다. 해당 형식은 유추되어야 합니다. 따라서 익명 형식의 사용은 지역 변수로만 제한됩니다.

    • product2는 명명된 형식의 인스턴스이므로 Product는 As 절로 형식 유추를 사용하지 않고도 선언할 수 있습니다.

      Dim product2a As New Product With {.Name = "paperclips", .Price = 1.29}
      
  • Product에 적절한 생성자가 정의되어 있는 경우 product2는 개체 이니셜라이저를 사용하지 않고도 선언 및 초기화할 수 있습니다.

    Dim product2b As New Product("paperclips", 1.29)
    

    또는 다음과 같은 문을 사용하여 같은 효과를 낼 수 있습니다.

    Dim product2c As New Product
    product2c.Name = "paperclips"
    product2c.Price = 1.29
    

    product1의 경우 속성이 이니셜라이저 목록 자체에 명명 및 정의되어 있으므로 비슷한 선언은 불가능합니다.

  • product1, product2 및 이들의 속성은 강력한 형식이므로 IntelliSense를 사용하여 해당 개체를 사용하는 코드를 탐색할 수 있습니다.

    경고

    익명 형식의 이름은 컴파일러에서 생성되며 이는 컴파일할 때마다 달라질 수 있습니다. 프로젝트를 다시 컴파일하면 이름이 변경되므로 사용자 코드는 익명 형식의 이름을 사용하거나 이에 의존해서는 안 됩니다.

참고 항목

작업

방법: 익명 형식의 인스턴스 선언(Visual Basic)

방법: 익명 형식 선언에서 속성 이름 및 형식 유추(Visual Basic)

참조

Key(Visual Basic)

개념

익명 형식(Visual Basic)

지역 형식 유추(Visual Basic)