Visual Basic에서 속성(Property)은 두 가지 방법으로 선언할 수 있습니다:
' 자동 속성 Public Property Name As String ' 전체 속성 Private _age As Integer Public Property Age As Integer Get Return _age End Get Set(value As Integer) If value < 0 Then Throw New ArgumentException("나이는 음수일 수 없습니다") _age = value End Set End Property
Set 사용 시 뉘앙스:
Value는 할당된 값을 참조하는 가상 변수입니다.Set 내에서 검증, 로깅, 이벤트 실행을 수행할 수 있습니다.사용 시기:
VB.NET에서
Set(ByVal value As Integer)대신Set(value As Integer)로 작성할 때 발생하는 오류는 무엇인가요? 왜 그렇게 작성하면 안 되나요?
답변:
VB.NET 문법은 Set에서 매개변수 ByVal을 명시적으로 선언할 필요가 없으며 지원하지도 않습니다 — 단순히 Set(value As Type)를 사용하십시오. Set(ByVal value As Integer)로 작성하면 컴파일 오류가 발생합니다.
오류 코드 예시:
'Set(ByVal value As Integer) — 컴파일 오류 Public Property Prop As Integer Set(ByVal value As Integer) ... End Set End Property
고전 VB6에서는 이 구문이 허용되었지만, VB.NET에서는 Set(value As Type)가 엄격하게 요구됩니다.
역사
ByVal을 사용하여 컴파일러에서 기괴한 오류가 발생했으며, 이는 오랫동안 원인을 찾을 수 없었습니다. 린터가 명확한 이유를 보여주지 않았기 때문입니다.역사
역사
자동 속성을 통해 참조 형식 객체를 복사할 때 Get/Set을 통해 깊은 복사를 구현하는 것을 잊어버렸습니다. 그 결과 동일한 객체에 대한 참조의 중복이 발생하고, 한 인스턴스에서의 변경이 다른 인스턴스에 영향을 미치게 되었습니다.