2011-05-15 21 views
11

Delphi XE'de RAD Studio Documentaion okuyorum. Burada bazı metinler.delphi XE çok üniteli ad alanı sorusu

[Delphi Referans -> Delphi Dil Rehberi -> Programlar ve Birimler -> Kullanma Ad Alanları -> Namespaces aranıyor -> Çok ünite Ad]

çok birimli Ad

Çoklu üniteler ünite beyanları aynı isim alanına başvurursa, aynı isim alanına ait olabilir. Örneğin , tek aşağıdaki birim açıklamalarla, iki dosya, unit1.pas ve unit2.pas oluşturabilirsiniz:

Bu örnekte
// in file 'unit1.pas' 
unit MyCompany.ProjectX.ProgramY.Unit1 

// in file 'unit2.pas' 
unit MyCompany.ProjectX.ProgramY.Unit2 

, ad MyCompany.ProjectX.ProgramY mantıksal tümünü içeren unit1.pas ve unit2.pas arayüz simgeleri. Bir ad alanındaki sembol adları, ad alanındaki tüm birimler genelinde benzersiz olmalıdır. Yukarıdaki örnekte
, bu test

mySymbol

adlandırılan genel bir arayüz sembolü tanımlamak her ünite1 ve baskısı2 bir hatadır. kodunun altında.

----------------------------------------------------------------- 
program Project1; 

{$APPTYPE CONSOLE} 

uses 
    SysUtils, 
    Lib.A in 'Lib.A.pas', 
    Lib.B in 'Lib.B.pas'; 

begin 
    WriteLn (TestValue) ; 
    ReadLn ; 
end. 
----------------------------------------------------------------- 
unit Lib.A; 

interface 
    const TestValue : Integer = 10 ; 
implementation 

end. 
----------------------------------------------------------------- 
unit Lib.B; 

interface 
    const TestValue : Integer = 10 ; 
implementation 

end. 

Bu bir hata değildir. Niye ya? Anlamıyorum

+0

* Yalnızca * 'SysUtils, Lib'ı' Project1'de kullanır ve 'LibV'de' TestValue: Tamsayı = 20'yi kullanır ve 'Project1'de' WriteLn (TestValue) 'yaparsa ne olur? –

+0

Codegear'ın uzatma konusunda bazı düzensiz planları olduğunu varsayalım. Win32 için Delphi'deki ad alanlarının hiçbiri uygulanmamıştır. Delphi'de çoklu birim ad alanları bulunmuyor ve yukarıdaki belgelerin ne hakkında olduğunu söylemek zor. – kludg

cevap

4

Kodunuz belgelerle eşleşmiyor. Belgeler açıkça 'unit MyCompany.ProjectX.ProgramY.Unit1' dosya ismini unite.pas değil MyCompany.ProjectX.ProgramY.Unit1 olduğunu belirtir. Bununla birlikte, bu özelliğin tamamen uygulandığına inanmıyorum. Ben dosya a.pas ve dosya b.pas ikinci ünitede birinci üniteyi depolamak için kodunuzu değiştirirsem, bekliyordum tam olarak hangisi (birimler hiç derlemek yok ve hata

[DCC Error] A.pas(1): E1038 Unit identifier 'Lib.A' does not match file name 

olduğunu bkz.)

Sizin durumunuzda, her zaman 'çakışan' global - Lib.A.TestValue ve Lib.B.TestValue adının tam adını kullanabileceğiniz için çakışma yoktur.

+0

Aynı hatayı da aldım ama Delphi 2009 kullanıyorum. Belki bu XE (veya 2010) için yeni. –

+0

XE'de test oldum. – gabr

+1

Sadece doğrulama: Delphi * XE * kullanıyor musunuz? Sormak genellikle dokümantasyonun arkasındaki özelliklerden değil, geride kaldığından mı? Cevabınızdan Andreas'a, gördüğünü gördüm.İlginç. –

0

Delphi.NET'te (Prism'den önce): birim adı = ad alanı. O zamanlar bu şekilde kullandıkları yol buydu - ve dotNET'te bir birim gerçekten bir isim-alanıydı (kapsayıcı IL'de olduğu gibi dahil).

Yerel Delphi'de, farkı görmüyorum (eğer varsa).