2010-01-20 5 views

답변

13

네임 스페이스, 모든 식별자와 같은 구성하기위한 것입니다.

그래서 프로젝트를 사용하면 더 나은 방법으로 프로젝트를 구성하는 경우에만 이점이 있습니다. 이 매우 주관적인 문제 (가장 간단한 명명 규칙조차도 '전쟁'이있었습니다!), 정말 대답하기가 불가능합니다.

Here is some documentation 델파이에서 네임 스페이스가 작동하는 방식.

델파이에서는 '실제'네임 스페이스 (두 개 이상의 일반 DLL이 동일한 네임 스페이스에 기여할 수 있으며 .NET 환경에서는 네임 스페이스가 작동하는 방식입니다.)는 BPL 방식이 될 수 있지만 '일반 DLL'과 동일하지 않습니다. 이것은 Delphi 자체의 제한이 아니라 Windows의 기본 DLL이 작동하는 방식입니다.

--jeroen

+0

+1 흥미로운 링크와 비교하십시오. 나는 델파이에 "공식적인 네임 스페이스"가 있다는 것을 몰랐다. – jpfollenius

+1

문서 기사가 Delphi.NET (dcuil 파일 등) 용으로 작성된 것 같습니다. Embarcadero는 Delphi for Win32 네임 스페이스를 문서화하기 위해이를 편집해야합니다. – kludg

+0

+1 링크를 주셔서 감사합니다 ... 지금이 네임 스페이스 접두사를 지원하는 버전의 참조를 찾고 있습니다 ... –

0

나는이 질문에 대한 의견과 분명한 오해에 대한 응답으로이 답변을 편집했습니다.

내가 제안한 것과 같이 유닛 이름을 사용하는 것에서 볼 수있는 유일한 실용적인 이점은 IDE가 "네임 스페이스"접두사없이보다 나은 방법으로 유닛을 정렬한다는 것입니다. 대신 다른 폴더를 사용하는 것이 좋습니다.

경우에 따라 이름 충돌 때문에 이해가 될 수 있습니다. 예를 들어 단위가 MyLib.Utils이고 단위가 MyOtherLib.Utils 일 수 있습니다. 이는 실제로 IDE와 혼자서 혼란을 피할 수 있습니다.

당신은 정적 클래스 메소드와 추상 클래스를 사용하여 네임 스페이스를 시뮬레이션 할 수 있습니다 :

type 
    Utils = class abstract 
    class procedure Beep; static; 
    end; 
... 
Utils.Beep; 
+1

Serg가 맞다고 이해하면 그는 단위 이름 안의 ** 점 **을 묻습니다. –

+0

질문이 매우 자세하지 않기 때문에 옳을 수도 있습니다. 나는이 가능성을 반영하기 위해 나의 대답을 편집했다. – jpfollenius

+0

물론 "점이 찍힌"단위 이름에 관한 질문입니다.늘어나는만큼 내가 점은 단위 이름 접두사와 다른 것의 또 다른 심볼 일 뿐이라는 것을 이해합니다. 예를 들어, "MyLib 사용"을 작성하여 MyLib.MyUtils를 사용하거나 다른 방식으로 "MyLib"식별자를 사용할 수는 없습니다. – kludg

2

참조 : 델파이

Why does Delphi (dcc32.exe) have an option to set a “Namespace search path”?

네임 스페이스가 컴파일러에 의해 지원되므로 단위 이름에 점은 특별한 의미가 있습니다. dcc32.exe 옵션이 올바르게 설정된 경우 파일의 정규화 된 이름을 사용하거나 파일 이름에 '바로 가기'스타일을 사용할 수 있습니다.

그래서 당신은 또한

uses 
    MyBestTools; 

전체 수식 명을 피하기 위해 쓸 수

uses 
    MyCompany.MyProject.MyLibrary.MyBestTools; 

면책 조항 : 현재이 모든 이론이다 그러나 나는 가까운 미래 IIN 일부 프로젝트에 네임 스페이스의 사용을 만들 것입니다

더 나은 IDE 지원을 받으려면 QualityCentral에서이 추천 제안에 대해 투표하십시오 :

Visualize the unit namespaces hierarchy in the IDE

+1

IDE (Delphi 2009)에서 동일한 옵션을 찾았습니다 : 프로젝트/옵션/Delphi 컴파일러/기본 네임 스페이스, 네임 스페이스 접두어 – kludg

+0

Delphi XE7 IDE에서 "Unit scope names"라고 입력했습니다 – SoftDeveloper

+0

@SoftDeveloper는 XE7에 여전히 ' NS = dcc32의 네임 스페이스 검색 경로 매개 변수? – mjn