PDA

View Full Version : تفاوت Uses بین بخش‌های Interface و Implementation



A.Nemati
یک شنبه 06 آبان 1386, 09:17 صبح
عنوان، گویای سوال است.
تفاوت این uses در این دوتا چیه؟

بعضی وقتها که مجبوریم Circular unit reference داشته باشیم، اگه یکی از یونیتها رو در implementation یونیت دیگر use کنیم، خطایی گرفته نمی‌شه. ولی آیا اینکار درسته؟؟؟؟

ghabil
یک شنبه 06 آبان 1386, 09:41 صبح
خب گاهی اوقات به بعضی از کلاسها در اینترفیس نیاز داری ؛ اونوقت راهی نداری بجز اینکه در Uses اینترفیس یونیت مربوطه رو بزاری ولی اگر اینطور نیست حتما در قسمت Implementation بزاری بهتر و درستتره.

A.Nemati
یک شنبه 06 آبان 1386, 15:56 عصر
چرا در implementation بهتره و درست‌تره؟
اگه اینطوره پس چرا خود دلفی هیچ‌وقت یونیت‌های لازم در قست implementation را در این قسمت نمی‌ذاره و فقط اونا رو در قسمت interface می‌ذاره، حتی اگه در interface از اونا استفاده نشده باشه (بجزه ADODB , DB که برخی مواقع اونا رو در implementation قرار می‌ده)؟

vcldeveloper
یک شنبه 06 آبان 1386, 21:13 عصر
اگه اینطوره پس چرا خود دلفی هیچ‌وقت یونیت‌های لازم در قست implementation را در این قسمت نمی‌ذاره و فقط اونا رو در قسمت interface می‌ذاره
دلفی یونیت های مورد نیاز را همیشه در قسمت Interface قرار میده، چون معمولا این یونیت ها برای تعریف نوع کامپوننت های به کار رفته در فرم به کار میرند، اما اگر در دلفی با استفاده از use unit بخواید یونیتی را به یونیت جاری اضافه کنید، بصورت خودکار آن را به Implementation اضافه می کنه.
بهتره در صورتی که به یونیت در بخش Interface نیاز ندارید، آن را در بخش Implementation معرفی کنید تا در شرایط خاص از ایجاد حلقه در معرفی یونیت ها جلوگیری کنید. مثلا اگر unit1 در Interface خود unit2 را use کند، و unit2 هم همین کار را برای unit1 انجام بده، یک حلقه بوجود میاد و compiler بهتون خطا میده. اما اگر این کار در بخش implementation صورت بگیره، خطایی داده نمیشه.

A.Nemati
دوشنبه 07 آبان 1386, 15:46 عصر
بهتره در صورتی که به یونیت در بخش Interface نیاز ندارید، آن را در بخش Implementation معرفی کنید تا در شرایط خاص از ایجاد حلقه در معرفی یونیت ها جلوگیری کنید. مثلا اگر unit1 در Interface خود unit2 را use کند، و unit2 هم همین کار را برای unit1 انجام بده، یک حلقه بوجود میاد و compiler بهتون خطا میده. اما اگر این کار در بخش implementation صورت بگیره، خطایی داده نمیشه.
از توجهتون ممنون
مگه زمان کامپایل شدن یونیت‌هایی که در Interface معرفی شدن با یونیت‌های معرفی شده در Implementation تفاوت داره.
اگه ممکنه می‌خوام کمی فنی‌تر موضوع رو بدونم.

Hamid_PaK
دوشنبه 07 آبان 1386, 18:24 عصر
حاج علی که درباره با حلقه توضیح دادن مسئله مشخص شد !!!

vcldeveloper
سه شنبه 08 آبان 1386, 07:13 صبح
مگه زمان کامپایل شدن یونیت‌هایی که در Interface معرفی شدن با یونیت‌های معرفی شده در Implementation تفاوت داره.
یونیتی که در Implementation در بخش uses بکار میره، فقط در همون Implementation میشه ازش استفاده کرد. اما یونیتی که در بخش uses از Interface قرار میگیره، را می توان در کل یونیت استفاده کرد.

A.Nemati
سه شنبه 08 آبان 1386, 13:49 عصر
ممنون از توجهتون. ولی من جوابمو نگرفتم.
یکبار دیگه می‌پرسم، چرا وقتی یونیت‌های دو فرم را در بخش Interface به هم معرفی (use) می‌کنم، Circular unit reference پیش می‌آد ولی وقتی در بخش Implementation اینکارو می‌کنم، مشکلی پیش نمی‌آد ؟؟؟

مگه زمان کامپایل شدن یونیت‌هایی که در Interface معرفی شدن با یونیت‌های معرفی شده در Implementation تفاوت داره.
اگه ممکنه می‌خوام کمی فنی‌تر موضوع رو بدونم.

Mohammad_Mnt
سه شنبه 08 آبان 1386, 14:21 عصر
یونیت‌هایی که در بخش Interface قرار دارند به یونیت‌هایی که این یونیت را در بخش Uses خودشون دارند هم اضافه می‌شه. ولی این اتفاق برای بخش Implementation نمی‌افته.
بنابراین، اگر U1 یونیت U2 را در قسمت Uses بخش Interfac قرار بده و U2 یونیت U1 را در قسمت Uses بخش Interface قرار بده، در نتیجه یه حلقه پیش می‌آد