سرمایه گذاری متفاوت در سال نو 🍎🌱 ۳۵٪ تخفیف نوروزی ➕ حضور رایگان در مسترمایند نخبگان صنعت نرم‌افزار 💻✅
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ سید مجتبی حسینی
visibility متغییر ها
آقای سلطانی حل شده توسط آقای سلطانی

سلام.

خسته نباشید.

من یک بررسی انجام دادم و متوجه شدم که متغییر هایی که به صورت private تعریف میشن، در کلاس فرزند هم قابل دسترسی اند. یه جورایی عملکردی شبیه protected داره و نه private.

چون در زبان‌های شی گرای دیگه مثل java یا php عملکرد این دو با هم متفاوت هستن و private فقط در کلاس تعریف شده قابل دسترسی هست ولی protected در کلاس‌های تعریف شده و child class ها.

پس زمانی که پشت متغییری underline میزاریم دراصل داریم اون رو protected تعریف میکنیم نه private. درسته؟

راهی هست که بشه متغییری رو کامل از نوع private تعریف کرد که در child class‌ها هم قابل دسترسی نباشه؟

سلام وقت بخیر

بله منم به این موضوع در تاپیک‌های قبلی اشاره کردم و دارت در کل از همین دو visibility پشتیبانی میکنه و اون چیزی که مدنظرت هست رو نمیشه داشت

میلاد عزیززاده ۰۴ مهر ۱۴۰۰، ۰۷:۴۳

سلام. وقت بخیر

 

من مطلبی خونده بودم مبنی بر اینکه در زبان dart، اگر قبل از نام یک فیلد underline بذاریم، اون متغیر در اون فایل دارت ما private نمیشه (مثلا product._id در سراسر در اون فایل بدون ارور قابل استفاده هست) و در فایل‌های Dart دیگری که داریم invisible میشه.

پس بنظرم با توجه به این، اگر کلاس فرزند در یک فایل dart دیگری تعریف و پیاده سازی بشه و فیلد‌های اون private باشند و getter/setter هم نداشته باشند، هیچ جوره قابل خواندن و نوشتن نیست. 

یلدا محصلی ۰۴ مهر ۱۴۰۰، ۰۸:۵۰

دوستان در اینجا منظور از پرایوت اینه که تو فایل‌های دیگه نمیشه بهش دسترسی داشت. قطعا شما در یک فایل یعنی در یک صفحه این تمرین رو انجام دادید و مشاهده کردید که در همه کلاس‌ها متغیر پرایویت قابل مشاهده است.درسته؟؟

 

اما برای اینکه پرایوت بودن رو بهتر متوجه بشید، اگر در IDE هستید ، یک دارت فایل جدید بسازید و از کلاسی که در دارت فایل قبلی متغیرتون رو توش پرایوت کردید ارث بری کنید. حالا می‌بینید که به متغیر پرایوت شده دسترسی ندارید.

بهترین پاسخ
آقای سلطانی ۰۴ مهر ۱۴۰۰، ۰۸:۵۸

پس با این اوصاف آقای شاهینی اشتباه توضیح دادند و این ویدئو باید اصلاح بشه.

Nik ۳۱ شهریور ۱۴۰۳، ۲۲:۰۴