PDA

View Full Version : منظور از internal چیست؟



c#_programmer
شنبه 31 فروردین 1387, 13:00 عصر
سلام دوستان
منظور از متغیر یا کلاس internal یا هر چیزی که میتونه internal باشه .چیه؟
با تشکر

Mahdi.Kiani
شنبه 31 فروردین 1387, 13:24 عصر
سلام دوستان
منظور از متغیر یا کلاس internal یا هر چیزی که میتونه internal باشه .چیه؟
با تشکر

Internal و کلمات دیگری از قبیل Public، private و ... اصطلاحا به Access Modifier ها معروف هستند. به طور کلی با این ها می توانید، سطوح دسترسی و محدوده قابل رویت بودن آبجکت را مشخص کنید.
internal که گاها با آن friend نیز گفته می شود، به این منظر به کار برده می شود که کلاس که توسط internal مشخص می شود، تنها در همان اسمبلی خودش و توسط کلاس های داخل همان اسمبلی قابل دسترسی می باشد.
از این خاصیت به ویژه در تولید کامپوننت ها و بسته بندی آن ها استفاده می شود.
به عنوان مثال فرض کنید که کلاسی برای ترسیم اشکال نوشته اید. با نام Graphic .این کلاس دارای متد های مختلفی از جمله DrawCircle ، DrawRectangle و ... می باشد. طبیعتا کلاس گرافیک بایستی به صورت public تعریف شود تا در خارج از اسمبلی خودش قابل دسترسی باشد و بتوان متد های آن را فراخوانی کرد.
حال شما در کامپوننت خود، کلاس هایی به منظور ترسیم اشکال مختلف ایجاد کرده اید. مثلا کلاسی به نام Rectangle که عمل ترسیم مستطیل را انجام می دهد. طبیعتا کلاس Rectangle بایستی به صورت internal تعریف گردد. چرا که بایستی تنها بتوان از طریق کلاس graphic به آن دستزسی داشت و کاربر نهایی نیاز به استفاده و دسترسی مستقیم به کلاس Rectangle ندارد. چرا، چونکه کاربر نیاز ندارد بداند که الگوریتمی که مستطلی را ترسیم می کند، به چه شکلی کار می کند. او فقط نیاز دارد بداند که چه پارامتر هایی را به کلاس Graphic بفرستد و منتظر دریافت شکل خود از ملاس شما باشد. این همان چیزی است که در مباحث OOP ، به Information Hiding معروف است. ( گاهی هم به Implementation Hiding معرفی می شود) چون نحوه پیاده سازی از نحوه به کار گیری از هم جدا شده اند.

البته این یک مثال بود. و ممکن است بر اساس نوع کامپوننت و هدف شما ، کاربر بتواند دسترسی مستقیم به کلاس Rectangle داشته باشد و....

البته نکات بسیاری در رابطه با تولید کامپوننت های شخصی وجود دارد که بحث در باره آن ها ربطی به موضوع تاپیک نداره.
موفق باشید

naeeme
شنبه 31 فروردین 1387, 13:26 عصر
یک متد یا یک کلاس اگر به صورت internal تعریف بشن، قابل دسترس توسط تمامی کلاس هایی هست که در همان namespace تعریف شدن اما توسط کلاسهای خارج از اون namesapace دیده نمیشن.

Mahdi.Kiani
شنبه 31 فروردین 1387, 13:59 عصر
یک متد یا یک کلاس اگر به صورت internal تعریف بشن، قابل دسترس توسط تمامی کلاس هایی هست که در همان namespace تعریف شدن اما توسط کلاسهای خارج از اون namesapace دیده نمیشن.

سلام
nameSpace با اسمبلی خیلی فرق می کنه.. آبجکت هایی که با internal معرفی می شوند، در همان اسمبلی خودش قابل دستیابی است.. نه فقط در داخل NameSpace خودش
یک اسمبلی معمولا یک namespace پیش فرض دارد که همنام با نام خود اسمبلی است. شاید به همین دلیله که فکر کردین، اسمبلی ها با nameSpace ها یکی هستند.
یک اسمبلی می تواند دارای یک یا چند nameSpace باشد.
آبجکت هایی که به صورت internal مشخص می شوند، در همه جای اون اسمبلی و توسط کلاس های دیگر ، در هر namespace ای که از اون اسمبلی باشند قابل دستیابی هستند.
و به همین دلیل است که می توان nameSpace هایی با نام یکسان در اسمبلی های مختلف داشت
به عنوان مثال فضای نام System می تواند اشاره به فضای نام System در اسمبلی System ، اسمبیل mscorelib و یا اسمبلی System.Core و یا حتی در اسمبلی کامپوننت شخصی شما باشد.
مثلا naeem.System !!! که naeem در اینجا میشه نام اسمبلی شما که nameSpace سیستم درون آن قرار گرفته است. حال اگر کلاسی با نام A در NameSpace سیستم داشته باشید ( که internal باشد) توسط کلاس B که در NameSpace دیگری مثلا به نام حسن، قرار دارد، قابل دستیابی سات. به شرطی که حسن نیز در همان اسمبلی naeem باشد
موفق باشید

اگر باز هم جایی قابل ابهام هست تا توضیح بیشتری بدهم
موفق باشید

naeeme
شنبه 31 فروردین 1387, 14:34 عصر
حق با شماست. من متن رو درست نخونده بودم. مرسی از تذکرتون:لبخندساده:

shervin_agh67
شنبه 31 فروردین 1387, 22:43 عصر
فرق internal با protected چیه ؟ هر دوی اینها فقط در داخل همان فضای نام قابل استفاده هستند. من قبلا شنیده بودم که friend به توابعی می گن که به عناصر محافظت شده فضاهای نام دیکر دسترسی داشته باشد. البته در صورتی که قبلا در آن فضای نام تعریف شده باشند. آیا این درسته ؟

Mahdi.Kiani
شنبه 31 فروردین 1387, 23:25 عصر
http://msdn2.microsoft.com/en-us/library/wxh6fsc7(VS.71).aspx

Payman62
دوشنبه 09 فروردین 1389, 13:00 عصر
سلام.
آیا درسته که بگیم اینترنال و پابلیک در محدوده یک اسمبلی به یه صورت عمل میکنن؟

yavar00111
چهارشنبه 24 خرداد 1391, 14:51 عصر
سلام.
آیا درسته که بگیم اینترنال و پابلیک در محدوده یک اسمبلی به یه صورت عمل میکنن؟

بله، در محدوده یک اسمبلی تفاوتی ندارند.