PDA

View Full Version : فرق بین Protected و Internal Protected



mohsen.dbnet
یک شنبه 22 مرداد 1396, 14:48 عصر
با سلام و احترام خدمت دوستان عزیز
می خواستم فرق بین Protected و Internal Protected رو بدونم.


تا اینجا فهمیدم که

Private: دسترسی فقط از طریق خود کلاس مربوطه است.
Public: دسترسی از خود کلاس و کلاس هایی که ازش مشتق می شن و نیز هر شی که ازش ساخته می شن. در کل از همه جا.
Protect: دسترسی از خود کلاس و هر کلاسی که ازش مشتق شده باشه.
Internal: دسترسی از تمام نقاط داخل فایل پروژه (به طور مثال Program.cs)
Protect Internal: دسترسی مثل Protect ولی فقط در محدوده پروژه (یعنی در فایل Program.cs کلاس و هر کلاسی ازش مشتق می شن)

حالا نمی دونم این چیزهایی که گفتم درسته یا نه؟
اگه توضیحی هم که بتونه تکمیل کنه این موضوع رو ممنون میشم.


با تشکر

RIG000
یک شنبه 22 مرداد 1396, 20:05 عصر
نظر بگیر یه لایه داری کا مثلا کنترلر ها و ویو ها و ... در اون هستن . که یک اسمبلی هست که در نهایت به dll ختم میشه. (یاداورای که exe هم یک اسمبلی هست.)
در نظر بگیر حالا یه لایه مثلا dataaccesslayer هم داری که با یک کلاس لایبریی ساختیش و متدهایی رو بار عملیات CRUD بهت سرویس میده... در نهایت ما اینجا معماری پروژه توضیح نمیدیم پی همین دو لایه رو درنظر میگیریم و اسم والی رو میزاریم اسمبلی پورتال و یکی هم میزاریم DataAcess . پس شد دو تا اسمبلی.
حالا فرض کن یک کلاسی در اسمبلی داری (فرقی نداره) و یک متد یا پراپرتی private توش داری. پس فقط تو مون کلاس میتونی ازش استفاده کنی و نه در هیچ کلاس دیگه ای. این میشه private
حالا درمورد Public یعنی شما اگر متد و پراپرتی داشته باشی که پابلیک باشه پس در هر کلاس دیگه ای در هون اسمبلی و در اسمبلی های دیگه میتونیم بهش دسترسی داشته باشیم
حالا Internal یعنی شما اگر یک متد یا پراپرتی درست کنی در تموم کلاس های همون اسمبلی میتونی بهش دسترسی داشته باشی.
حالا protected یعنی اینکه شما با ارث بری میتونی بهش دسترسی پیدا کنی. فرض کن کلاسی داری که قرار کلاس دیگری ازش ارث ببره. حالا این کلاس پدر یک پراپرتی protected داره و در کلاس فرزند ازش ارث میبره ... (یعنی اعضای protected با نیو ساخت از کلاس قابل استفاده نیستن. ولی قابل دسترسی هستن. ارور not accessible هم میده احتمالا) . در نهایتموضوع برای protected اینه که شما در هر اسمبلی میتونی بهش دسترسی پیدا کنی ولی با ارث بری.
protected internal : اگر قبلی ها رو متوجه شدی الان اینو خودت دیگه میتونی بگی.:چشمک:

mohsen.dbnet
دوشنبه 23 مرداد 1396, 15:42 عصر
ممنون دوست عزیز

حالا که بحثش شد و برای این که ببینم خوب فهمیدم، فرض کنید کلاس A که متدی به نام y داره

146079

که رو همین سطح دسترسی هاشون رو به صورت شماتیک نشون می دم.

Private:
146080

Public:

146081

Protect:

146082

Internal:

146083

Protect Internal

146084

امیدوارم درست متوجه شده باشم!
ممنون می شم تایید بفرمایید.

RIG000
دوشنبه 23 مرداد 1396, 18:09 عصر
اگر علامت های خودت مد نظرت هست رو داری. پس #?y درسته. اما در کل به جای این موارد سعی کن کلاس هایی رو بسازی و توش تست بگیری. اینجوری بهتر متوجه میشه.

mohsen.dbnet
دوشنبه 23 مرداد 1396, 21:06 عصر
اگر علامت های خودت مد نظرت هست رو داری. پس #?y درسته.

دقیقا چون معادلشو تو UML پیدا نکردم اینجوری نوشتم.

RIG000
دوشنبه 23 مرداد 1396, 21:12 عصر
دقیقا چون معادلشو تو UML پیدا نکردم اینجوری نوشتم.

این هم ی هدیه واسه یادگیری Access Modifier ها .
http://o7planning.org/en/10439/access-modifier-in-csharp
امیداورم موفق باشی .

mohsen.dbnet
دوشنبه 23 مرداد 1396, 21:44 عصر
ممنون دوست عزیز از لطف و توجه تون

فقط یه موردی
قبول داری باید از مفاهیم به کد نویسی رسید تا از کد نویسی به مفاهیم.

این روش باعث می شه برنامه نویس تو بازار جسور باشه تا این که خودشه رو همیشه در بند تحلیلگر ببینه.

اوه عجب چیزی گفتم.:لبخند: