Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 팁&트릭
Delphi Programming Tip&Tricks
[294] 다른 Unit에 동일한 열거형(Enumeration Constants)의 이름이 존재할 경우 사용방법
권익수 [freepascal] 2949 읽음    2013-01-13 13:46
두 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;

+ -

관련 글 리스트
294 다른 Unit에 동일한 열거형(Enumeration Constants)의 이름이 존재할 경우 사용방법 권익수 2949 2013/01/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.