두 Unit에 동일한 이름의 열거형 자료가 있을 경우, uses에 선언하는 순서에 따라서 값이 달라집니다.
예를 들면 ftExtended는 TFloatType에도 있고 TFieldType에도 있는데 uses 구분에 System.TypInfo와 Data.DB를 선언하는 순서에 따라 가장 나중에 선언한 Unit의 형식을 따라가게 됩니다.
이럴 경우 ftExtended가 어디 Unit에 선언된 값이냐를 확실히 지정해야 예기치않은 오류를 막을 수 있습니다.
아래 예제를 참고하세요!
uses
...,
System.TypInfo, Data.DB;
// Data.DB, System.TypInfo;
:
:
procedure TForm1.TestClick(Sender: TObject);
var
l_FloatType: TFloatType;
l_FieldType: TFieldType;
begin
Memo1.Lines.Clear;
Memo1.Lines.Append('Ord(System.TypInfo.ftExtended) = ' + IntToStr(Ord(System.TypInfo.ftExtended))); // Result = 2
Memo1.Lines.Append('Ord(Data.DB.ftExtended) = ' + IntToStr(Ord(Data.DB.ftExtended))); // Result = 45
Memo1.Lines.Append('Ord(TFloatType.ftExtended) = ' + IntToStr(Ord(TFloatType.ftExtended))); // Result = 2
Memo1.Lines.Append('Ord(TFieldType.ftExtended) = ' + IntToStr(Ord(TFieldType.ftExtended))); // Result = 45
l_FloatType := TFloatType.ftExtended;
Memo1.Lines.Append('Ord(l_FloatType) = ' + IntToStr(Ord(l_FloatType))); // Result = 2
l_FieldType := TFieldType.ftExtended;
Memo1.Lines.Append('Ord(l_FieldType) = ' + IntToStr(Ord(l_FieldType))); // Result = 45
// if "uses Data.DB, System.TypInfo" then Result = 2 -> System.TypInfo.ftExtended
// if "uses System.TypInfo, Data.DB" then Result = 45 -> Data.DB.ftExtended
Memo1.Lines.Append('Ord(ftExtended) = ' + IntToStr(Ord(ftExtended)));
end;
|