2016-08-03 3 views
1

모두에게 좋은 하루. 속성,VBA에서 값이없고 double 값이 0 인 double을 구별

Public myVal As Double 

두 스크립트 나는 클래스가

:

Dim myObject As new MyClass 
myObject.myClass = 0 
Debug.Print myObject.myClass 

Dim myObject As new MyClass 
Debug.Print myObject.myClass 

이 동일한 출력을 제공을

은 내가 VBA에 관한 작은 질문 및 변수 초기화를 가지고 : 0.

두 개의 0을 말할 수있는 방법이 있습니까? igned to 0 - 할당 된 값이 없으므로 출력은 기본적으로 0입니다.)?

사이드 질문 : 나는 IsEmpty 함수 (myClass.myVal)를 사용할 수 내가 아무런 문제가 없을

Public myVal As Variant 

로 선언합니다.

사람들은 보통 Double Over Variant를 선호하기 때문에 거기에는 단점이 있습니다. 이게 뭐야? 당신의 도움에 대한

감사합니다 :)

막심

+0

:

Option Explicit Private mInit As Boolean Private mVal As Double Public Property Get DoubleValue() As Double DoubleValue = mVal End Property Public Property Let DoubleValue(inValue As Double) mInit = True mVal = inValue End Property Public Property Get Initialized() As Boolean Initialized = mInit End Property 

코드 호출 그런 식으로, 당신은 필요한 경우 개체의 상태를보고 다른 속성을 가질 수있다 여분의 메모리를 사용하고 포인터 역 참조가 필요할 수 있으며 런타임 오류를 발생시키는 예기치 않은 유형을 전달할 수 있습니다. 그러나 초기화되지 않은 값을 테스트하는 이점이 있습니다. 프로그래밍에서의 이런 종류의 문제에 대한 일반적인 접근법은 데이터를 -1과 같이 프로그램 정의 된 "잘못된 값"으로 간단하게 초기화 한 다음이 조건을 검사하는 것입니다. 하지만 Double이 법적으로 -1을 포함한 어떤 값을 할당받을 수 있다면 분명히 작동하지 않습니다! – Mikegrann

답변

3

단점은 변수 Double 또는 Variant을 함께 할 수 없다. 그것은 당신의 수업의 배짱이 그들 주위에 머물기를 원하는 것에 노출시키는 것과 관련이 있습니다.

실제 속성을 만들고 속성을 사용하여 개체 상태를보고하는 것이 좋습니다. 이 줄 ...

Public myVal As Double 

은 ... 하지myVal 클래스의 속성을 확인한다. 공용 내부 구성원 변수를 제공하고 encapsulation을 나눕니다. 대신 실제 속성으로 지정하십시오.

MyClass.cls : 변형은 일반적으로하기 때문에 바람직하지 않다

Dim myObject As New MyClass 
myObject.DoubleValue = 0 
Debug.Print myObject.DoubleValue  '0 
Debug.Print myObject.Initialized  'True 

Dim myOtherObject As New MyClass 
Debug.Print myOtherObject.DoubleValue '0 
Debug.Print myOtherObject.Initialized 'False 
관련 문제