خوش اومدید.
readonlyتوی این ویدیو می‌خوایم به کلیدها و همچنین کلمه‌کلیدی نگاه کنیم.
خب، کلیدها چی هستن؟
کلید در واقع شناسه‌ی یکتا داخل یک دیتابیسه.
البته ما هنوز با دیتابیس‌ها کار نمی‌کنیم.
ولی چون داریم با مشتری‌ها سروکار داریم، فکر کردم خوبه که توضیح بدم IDها چطور کار می‌کنن،
staticچون یاد گرفتیم که یه کلمه‌کلیدی داریم که اجازه میده خودش رو هر بار با ایجاد یک مشتری جدید
افزایش بده، که می‌تونیم از اون مثلا به عنوان یه کلید استفاده کنیم.
ایده‌ی پشت کلید اینه که به هر ورودی یک ویژگی یکتا بده.
پس توی مثال ما، به هر مشتری چیزی منحصر به فرد داده میشه، چون ممکنه
John Doeاسم مشتری باشه، اما تو دیتابیس میلیون‌ها نفر،
John Doe ده‌ها یا حتی صدها داشته باشیم.
خب، اون وقت باید باهاشون چی کار کنیم؟
کدومیه؟ John Doeچطور بفهمیم کدوم
اینجاست که کلید وارد میشه، چون یه شناسه‌ی یکتا فراهم می‌کنه.
IDو معمولا همون ـه، یعنی یه عددی که به ورودی اختصاص میدی.
خب، حالا بریم و اونو راه‌اندازی کنیم.
private static intخب، من یه nextID به اسم می‌سازم که مقدارش رو برابر صفر قرار می‌دم.
staticاین میشه یه فیلد بعدی رو نگه داره.ID که قراره مقدار
staticایده اینه که این فیلد ـه، درسته.
پس جزئی از هر آبجکت مشتری نیست.
در واقع یه جورایی خارج از هر آبجکت مشتری قرار داره.
درسته.
IDخب حالا چطور برای هر مشتری یه اختصاص بدیم؟
private readonlyکاری که می‌کنیم اینه که یه متغیر درست می‌کنیم.
این کلمه کلیدی هست.
readonly intیه تعریف می‌کنم.underscoreID با اسم
این قراره شناسه‌ی یکتا باشه که برای هر کاربری که می‌سازیم متفاوته.
ایده اینه که حتی اگه مثلا پنج کاربر بسازید و کاربر سوم رو حذف کنید، روند IDها همچنان ادامه پیدا می‌کنه.
اینطوری:
شما یه مشتری می‌سازید.
اون مشتری ID صفر داره.
مشتری بعدی که می‌سازید ID یک می‌گیره، بعدی دو.
حالا فرض کنید اون با ID دو رو حذف کنید.
مشتری بعدی که بسازید دیگه ID دو نمی‌گیره، بلکه ID سه می‌گیره.
چون هر ورودی جدید همیشه یه ID افزایشی دریافت می‌کنه.
IDخب حالا چطوری این مشتری اختصاص بدیم؟ID رو افزایش بدیم و به
underscoreIDمی‌تونیم بریم توی سازنده‌ی پیش‌فرض، و بگیم برابر بشه با
nextID++.
این ++ مطمئن میشه که مقدار افزایش پیدا می‌کنه.
یعنی اول مقدار صفر رو اختصاص می‌ده و بعد اون رو یکی زیاد می‌کنه.
nextIDاین همون کاریه که ++ بعد از انجام می‌ده.
قبلا هم در دوره دیدیم که افزایش دادن چطور کار می‌کنه.
حالا نباید فراموش کنیم که همین کار رو توی همه‌ی سازنده‌ها انجام بدیم.
مثلا اینجا داخل سازنده‌ی دیگه‌مون.
این سازنده‌ی اختصاصی ما هست، درسته.
اونجا هم نباید یادمون بره.
سازنده‌ی دیگه‌ای نداریم، پس همین کافیه.
IDایده اینجاست که داریم رو تنظیم می‌کنیم و دیگه نمی‌تونیم بعداً اون رو برای هیچ مشتری تغییر بدیم،
تعریف شده.readonly چون
فقط یک بار می‌تونه مقداردهی بشه.readonly این متغیر
یعنی فقط یک بار می‌تونه یه مقدار بگیره و بعدش دیگه نمی‌تونیم مقدار جدیدی بهش بدیم.
کاری که ما می‌کنیم اینه که مقدار رو داخل یکی از سازنده‌هامون تعیین می‌کنیم.
و این سازنده‌ها نمی‌تونن پشت سر هم فراخوانی بشن.
فقط یکی‌شون صدا زده می‌شه.
پس یا این یکی یا اون یکی در مثال ما، چون دو تا سازنده داریم.
اگه پنج تا سازنده داشتیم، باید این خط رو توی همه‌شون اضافه می‌کردیم.
با این کار، هر مشتری یه شناسه‌ی منحصر‌به‌فرد می‌گیره.
خب.
privateحالا این شناسه هست و فقط داخل همین کلاس قابل دسترسیه.
ولی می‌تونیم جزئیات کاربر رو برگردونیم.
publicمثلا می‌تونیم یه متد readDetails به اسم getDetails بسازیم، یا حتی هم می‌تونه اسم مناسبی باشه.
فرقی نداره.
getDetails یا حتی writeDetails.
هر کدوم از اینا قابل قبوله.
Console.WriteLineاینجا فقط می‌نویسیم و جزئیات مشتری رو نمایش می‌دیم.
و می‌تونیم اینطوری استفاده کنیم:
name is ... و بعد ID is ... .
اینجا هم از _id استفاده می‌کنیم.
چون readonly و private هست.
پس فقط داخل همین کلاس در دسترسه.
می‌تونه اون رو بگیره.getDetailsاما متد
و نمایش بده.
خب.
حالا بریم سراغ فایل Program.cs.
و یه مشتری بسازیم.
مثلا customer1 = new Customer.
و بعد یه مشتری دیگه بسازیم به اسم customer2.
customer2 و برای حالا جزئیات رو نمایش بدیم.
پس می‌دونیم که چندتا سازنده مختلف وجود داره.
وقتی روش هاور کنیم، می‌گه multiple overloads.
یعنی سازنده‌های مختلفی برای استفاده داریم.
وارد کنیم.John Doeاینجا می‌تونیم یا از سازنده پیش‌فرض استفاده کنیم یا اطلاعاتی مثل
و بعد هم آدرس رو اضافه کنیم.
ولی لازم نیست حتماً این کارو کنیم.
چون آدرس و شماره تماس به صورت پیش‌فرض مشکلی ندارن.
customer1.getDetailsحالا می‌تونیم customer2.getDetails رو صدا بزنیم و همینطور .
ببینیم چه خروجی می‌گیریم.
چون همونطور که می‌بینیم، شناسه رو برمی‌گردونه.
مشتری اول شناسه صفر می‌گیره و مشتری دوم شناسه یک.
حالا اگه مشتری سوم و چهارم و به همین ترتیب بسازیم، هر کدوم شناسه بعدی رو می‌گیرن.
یعنی به ترتیب یکی یکی اضافه می‌شه.
customer3پس بیاید برای رو اجرا کنیم.getDetails هم
و ببینیم چه نتیجه‌ای می‌ده.
و اینم جزئیات مشتری: نام = customer و شناسه = دو.
اینجا داریم شناسه رو کاملاً مخفی نگه می‌داریم.
یعنی فقط داخل کلاس می‌شه بهش دسترسی داشت.
ولی می‌تونیم متدهایی بسازیم که مقدارش رو به بیرون نشون بدن، نه خود متغیر رو.
فقط مقدارش در دسترس قرار می‌گیره.
متغیر رو مستقیم نمی‌شه بیرون آورد، فقط مقدارش قابل استفاده‌ست.
خب، اینم از کلیدواژه read only.
IDو این هم شناسه یکتای که هر بار با ساختن مشتری جدید یکی یکی زیاد می‌شه.
staticچون این متغیر customer نیازی به شیء نداره تا وجود داشته باشه، بلکه خارج از هر شیء مشتری
به صورت کلی وجود داره.
خب، اینم از این ویدیو.
توی ویدیوی بعدی می‌خوام نشونتون بدم چطوری می‌شه های فقط‌خواندنی هم ساختproperty
پس می‌بینمتون اونجا.