سی شارپ

|

اموزش سی شارپ

اگر خاطرتان باشد وقتی در ابتدا من کلاس ها را خدمتتون معرفی میکردم گفتم که هر کلاسی 4 جز دارد.

که اجزا را به ترتیب گفتم : فیلد,property ,متد و even

که با فیلد ها و متد ها تا اینجا آشنا شدید.

property و even بحث هایی هست که ما قصد داریم خدمتتون بگیم. دراین قسمت میخواهیم با property آشنا بشیم.

property ها در اصل همان فیلدها هستند که حالا دامنه ی فعالیت آن ها یک مقدار گسترده تر شده در محیط کلاس یعنی دیگر صرفا فیلد نیستند که یک مقداری را بگیرند و یک مقداری از آن ها خوانده بشود. بلکه میتوان یک سری تمهیداتی امنیتی هم در آن ها لحاظ کرد که دسترسی را تا حدودی کنترل بکنند و یا احیانا آن مقدار را با شکلی بهتر به کاربر نمایش بدهد. ما در این قسمت همانطور که میبینید شما الان یک کلاسی داریم با نام کلاس person این کلاس person ما یک فیلدی دارد با نام x که از جنس integer هست.default constructor که سازنده پیش فرض هست برایش نوشتیم و construct over loading را به این شکل برایش نوشتیم که 3مقدار را میگیرد که firs name . last nameوage هست که در هنگام new کردن این مقادیر باید داده بشود به این نوع سازنده و مقادیری که داخل خود کلاس هست که 3 تا فیلد هست با استفاده از این 3 مقدار مقدار دهی میشود.

اموزش سی شارپدر پایین توجه کنید که ما از جنس private اومدیم یک فیلدی را تعریف کردیم با نام age.

علامت استانداردش را هم که خدمتتون گفتم برای private ها یک _ (آندرلاین) قرار میدهیم و camel case هست یعنی کلمه ی اول کامل به صورت کوچک هست حال اگر آن نام دو قسمتی بود قسمت دوم را اولین حرفش را با نام بزرگ در نظر میگیریم مانند last name که شما میبینید.last کلا کوچک هست و در Name حرف N به صورت بزرگ نوشته شده است.خب پس این فیلد private را شما در اینجا داشته باشید.
اموزش C sharpو حالا ما در این جا یک public int age داریم ولی این دیگر به صورت فیلد برای ما نیست و به صورت property میباشد.

دقت کنید که نگارشش درست مانند یک فیلد می ماند یعنی public int نام را دارد حالا تفاوتی که دارد نگاه کنید که ما یک بدنه برای آن در نظر گرفتیم. بدنه باز و بسته شده داخل بدنه از 2 کلمه ی کلیدیه get و set استفاده کردیم که هرکدام از این ها هم یک بدنه ایی را دارا میباشند حتما توجه داشته باشید به صورت یک اصل در بدنه ی property و در بدنه ی get ما حتما باید یک return را داشته باشیم و یک مقداری متناظر با مقدار خود property باید داخل آن return بشود. نگاه کنید که من یک فیلد private age دارم که سن را برای من مشخص میکند و این جا یک property public دارم که داخل خودش و در بدنه ی get همان age را return میکند و در بدنه ی set چک میکند که اگر مقدار آن age بزرگتر از 0 بود و کوچکتر از 99 بود این مقدار را برابر با مقدار اصلی خود این property قرار بدهد در غیر این صورت یعنی اگر یک کاربری آمد مقدار 0 را وارد کرد یا مقدار 100 را وارد کرد قبول نمیکند و مقدار بین این 0 و 99 را به عنوان سن در نظر میگیرد. خب شما نمیتوانستید روی فیلد ها همچین مانوری بدهید و شرط بذارید پس الان در اینجا 2 نکته حائز اهمیت است اول این که ما در property ها میتوانیم شرط هم برای مقدار فیلد هایمان در نظر بگیریم دوم این که دسترسی به آن فیلد را چون به صورت private هست فقط از طریق این property public ما میتوانیم دیگر دسترسی داشته باشیم یعنی از دنیای بیرون این کلاس کسی دیگر به این _age دسترسی ندارد اگر کلاس new بشود همه به این Age دسترسی دارند که property هست حالا این میداند خودش در دل خودش چه رفتاری با آن داشته یاشد. ما اصلا نمیخواهیم که کاربر بداند که ما یک فیلد private داریم که به این شکل یک property public به آن نشان میدهیم داخلش با آن فیلد private کار میکنیم چرا که این public دخل خود کلاس دیگر به این private دسترسی دارد ولی از بیرون ما به این private دسترسی نخواهیم داشت. به طور کلی تمامی اجزا در یک کلاس دیگر باهم دیگر مشکل دسترسی را نخواهند داشت public به private دسترسی دارد و private به public فقط این نوع access modifier های که ما قرار میدهیم برای دنیای بیرون کلاس ها است که دیگر بیرون کلاس ها ما وقتی که یک object از یک کلاس person. بزنیم به این _ دسترسی نداریم به Age بزرگ دسترسی داریم که Age خودش دسترسی دارد به age کوچک یعنی که یعنی که مقدارش را return میکند در بدنه ی get و در بدنه ی set بایدvalue ست کند. که value را میتواند با یک شرط ست کند.میتوانستیم این شرط را هم نگذاریم ولی همانطور که میبینید خواستیم ببینید که شما میتوانید در بدنه ی set نیز شرط بگذارد و اگر آن مقدار وارد شده برابر با مقداری بود که شما میخواستید آن موقع مقدار این فیلد private واقعا در آن اعمال بشود.

اموزش حرفه ای سی شارپبرای full name نیز دقیقا همین کار را انجام دادیم.

یک فیلد private داریم با نام first name و property متناظر با آن را به صورت public string first name تعریف کردیم.property ها را توجه داشته باشید از استاندارد پاسکال استفاده میکنم یعنی که حرف اولشان بزرگ هست تا کلمه ی بعدی و کلمه ی بعد مجددا حرف اولش بزرگ هست به صورت public تعریفش کردیم و داخل خودش get و set دارد. این get و set را بدانید که برای property میباشد. داخل get . return کردیم first name را که در اصل این frist name private هست و در داخل set همان first name را برابر با value این first name قرار دادیم. در اصل این 2تا میشوند یکی ولی با توجه به آن تفاوت هایی که گفتیم. تفاوت اول دسترسی را محدود کردیم تفاوت دوم این بود که میتوانستیم بگیم که مثلا یک نام خاص بود اصلا قبول نکند ویک سری تغییرات برایش در نظر بگیرد.

اموزش مبتدی سی شارپبرای last name هم به همین شکل عمل کردیم آمدیم یک فیلد private تعریف کردیم با نام last name یک property public تعریف کردیم متناظر با آن اسمش را last name قرار دادیم و در get return کردیم این فیلد private را و در set این فیلد private را برابر با value خود این last name در نظر گرفتیم. برای full name هم یک property نوشتیم به این صورت که گفتیم public string full name آکولاد {} را باز و بسته کردیم بدنه را ولی شما اینجا فقط get میبینید و set نمیبینید این را هم بدانید property هایی که فقط get دارند property های readonly هستند و propertyهایی که فقط set دارند property های writeonly هستند و property که مانند این property last name first name و age که هم get دارند و هم set دارند property هایی هستند که read,write هستند و هم میتوانید مقدار را از آن بخوانید و هم میتوانید مقدار به آن بدهید. در full name چرا حالا ما آمدیم فقط readonly کردیم به خاطر این که ما first name و last name را در بالا داریم دیگر نمیخواهیم مقداری را برایش ست کنیم فقط میخواهیم آن ها را بخوانیم. گفتیم که اگر این property فراخوانی شد داخل بدنه ی get return, کند first name را و به عولاه یک فاصله و last name و حالا از یک متدی به نام trim هم استفاده کردیم تا فواصل اضافه را اگر قبل و بعد از نام frist name و last name بود حذف بکند.

اموزش ابتدایی سی شارپیک متدی هم داریم که این متد را بارها با آن کار کردیم این متد void هست عرض کردم خدمتتون متدی که void باشد مقداری را نیاز نیست که return بکند ولی به غیر از void هر متد دیگری که باشد باید از همان جنس return داشته باشد چون void هست ما خواستیم که فقط داخلش full name و age را به ما نمایش بدهد.

اموزش سی شارپ

وارد کلاس program میشویم از کلاس person یک object ایجاد کردیم به نام p0 و new کردیم با سازنده پیش فرض age را بهش 20 دادیم و خواستیم که نمایش بهمان بدهد آن age را که از console large run استفاده کردیم که age را به ما نمایش بدهد.در پایین یک object دیگر ایجاد کردیم به نام p1.age را مشخص کردیم و first name و last name را مشخص کردیم و خواستیم که به ما نمایش بدهد full name و age را.برای p2 هم یک object هست که مجددا از سازنده ی دوم استفاده کردیم که first nameوlast name و age رامیگیرد و در نهایت خواستیم که ببینیم به جا صورت است.

اموزش سی شارپمن break point قرار میدم تا شما نحوه ی کار را ببینید.f5 را میزنم و p0 من فعلا نال است f11 را میزنم تا p0 من مقدار بگیرد و تبدیل به this میشود مقادیر را که ببینید وارد سازنده ی پیش فرض شده چون از سازنده ی پیش فرض استفاده کردیم داخل این هست new میشه در اینجا و حالا که new میشه تو این خط نگاه کنید p0.age و age من آچار هست یعنی که property هست age را برابر 20 قرار میدهیم حالا ببینیم چه رفتاری ایجاد میکند وقتی ما f11 را میزنیم از سازنده به p1 اومد p1را new کرد first name و last name و show info فراخوانی شد.

اموزش

خب break point را قرار میدهیم و مجددا چک میکنیم دقت کنید من f5 را میزنم و میبینید که p0 من null است با f11 حرکت میکنم سازنده پیش فرضم هست که new میشود میاد age را مقدار میدهد و فراخوانی میکند که age 20 هست.

میام خط بعدی f11 را میزنم دوباره سازنده پیش فرض من هست خب دوباره new میکنیم اینجا age را برابر 20 قرار میدیم first name را برابر با علیرضا last name را برابر با احمدی و show info را فراخوانی میکنیم.

و حالا شما برای این که آن مقدار private ها را شاهد باشید نگاه کنید وقتی من این را باز میکنم نگا کنید ما به خود property ها مقدار دادیم توی برنامه ولی نگاه کنید که منتاظر با property ها هم age هم first name هم last name مقدار دهی شد چرا که داخل خود این property ها ما مقدار دهی میکردیم.این کلمه ی this در اصل وقتی شما روی یک کلاس در حال کار هستید روی یک object کار میکنید وقتی که object خود را new میکنید این this دقیقا object شما قرار میگیرد.

اموزش سی شارپ

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

خب ادامه میدیم آموزشمون رو.

همانطور که میبینید من یک کلاس ایجاد کردم با نام someclass. کلاس من یدونه فیلد integer از جنس public داره با نام x و یک فیلد public دیگه داره اونهم با نام integer با نام f.فقط فیلد دوم من به صورت readonly تعریف شده است.همچنین من یک فیلد private دارم با نام _a که از جنس integer هست و متناظر با اون همانزور که کار کردیم در فایل آموزشی گذشته یک property ایجاد کردم که property که ایجاد کردم به صورت read و write هست یعنی هم get داره هم set داره.اگه خاطرتون باشه کفتم که get باید حتما یک مقداری رو return بکنیم که معمولا مقداری هست که به صورت متناظر با همون نام ولی با حرف کوچک و یک آندرلاین قبل نام فیلد به صورت private تعریف میکنیم و از طریق این property اون فیلد رو در گت return میکنیم و همون فیلد رو مقدار رو برابر مقدار همون property در بدنه ی set قرار میدیم که همونور که میبینید در get من فیلد private رو return کردم و در set فیلد private رو برابر با مقدار این property قرار دادم.

اموزش سی شارپProperty بعدی که داریم property b هست که متناظر با فیلد private b برامون ایجاد شده و فقط یدنه ی set داره اینجا هم براتون نوشتم که این property writeonly هستش و دیگه مقداری رو نمیتونه return بکنه و فقط میشه روی این property یک مقداری رو نوشت.

اموزش سی شارپ

Property بعدی property c هست متناظر با فیلد_c private ایجاد شده و این property readonly هستش یعنی فقط بدنه ی get داره و فقط یک مقدار رو return میکنه و نمیشه مقداری رو برای این property در نظر گرفت.

اموزش سی شارپحالا در کلاس program خودمون اومدم یک متغییر integer ایجاد کردم با نام inttemp برابر با 0 قرار دادم از کلاس someclass یک object ساختم new کردم و حالا دسترسی دارم به فیلد ها و property های اون کلاس.property A من چون هم read هم write بود من اینجا نگاه بکنید نام object رو که نوشتم دات رو که زدم دسترسی داشتم به property ها و فیلدها.property A چون readوwrite هست اینجا من یک مقداری رو بهش دادم و اینجا یک مقداری رو ازش خوندم یعنی هم readوهمwrite . یعنی اینجا عملیات write رو انجام دادم و تو خط بعد عملیات read رو انجام دادم یعنی که مقدار رو خوندم ازش داخل یک متغییری که تعریف کردم قرار دادم.

اموزش سی شارپ

برای property B خودم به صورت چون writeonly هستش فقط تونستم یک مقداری رو write بکنم داخلش و دیگه اگه من مینوشتم inttemp=object.B این خطا به من میداد و wrong usage بود به خاطر این که property readonly نبوده و writeonly هستش.read و write هم که نبوده.

برای property بعدی خودم که property C هست و این propert فقط readonly بوده تونستم مقدارش رو بخونم و داخل یک متغییر قرار بدم. همچنین برای eوf که جز فیلدهای بودند که ما تعریف کرده بودیم چون ما e رو به صورت public و معمولی تعریف کرده بودیم میتونیم مقداری اینجا مقداری رو بهش بدیم و مقدار رو بخونیم برای فیلد f چون که فقط به صورت readonly تعریفش کرده بودیم فقط تونستیم مقدارش رو بخونیم و داخل یک متغییر قرار بدیم.

دریافت آخرین مطالب وبلاگ در کانال داتینه

علی نعیمی

علی نعیمی هستم،دارای لیسانس سخت افزار.
از سال 90 بصورت تخصصی به فراگیری زبان سی شارپ پرداختم. در حال حاضر مسلط به سی شارپ، جاوا، پایگاه داده و زبان های تحت وب هستم.

نظرات
نظر بدهید