سی شارپ

|

آموزش سی شارپ (قسمت بیست و ششم)

در آموزش گذشته ما کلاس ها را ایجاد کردیم و همانطور که گفته شد کلاس student و teacher از کلاس person ارث بری میکنند.در اینجا ما ابتدا در کلاس program از کلاس person یک object میسازیم با اسم o_Person و برابر new Person قرار میدهیم بعد از باز کردن پرانتز میبینید که ما دو سازنده داریم :

آموزش سی شارپ (قسمت بیست و ششم)

در عکس زیر میبینید که ابتدا بعد از انتخاب کردن سازنده دوم مقدار Ali را به عنوان Name و Naeimi را به عنوان Family در ورودی میگیرد.بعد از آن ما سازنده ShowPerson را توسط “.” از o_person تنها جهت نمایش داخل console.writeline قرار داده ایم.

در آخر هم برای اینکه منتظر تایید توسط یک کلید باشد از دستور آخر استفاده میکنیم:

آموزش سی شارپ (قسمت بیست و ششم)

بعد از اجرای آن شما باید این خروجی را ببینید:

آموزش سی شارپ (قسمت بیست وششم)

اگر از کلاس student هم یک object بسازید میبیند که علاوه بر showStudent ،ShowPerson هم وجود دارد. همانطور که گفتیم چون کلاس student از کلاس person ارث بری میکند property های کلاس person هم اینجا موجود است. اگر ما فقط ShowPerson رابزنیم فقط اسم و فامیل را نشان میدهد چون در تعریف این property ما فقط name و family داریم.

آموزش سی شارپ (قسمت بیست و ششم)

ما در اینجا از showStudent استفاده کردیم و میخواهیم خروجی را به ما نمایش دهد :

آموزش سی شارپ (قسمت بیست و ششم)

بعد از اجرا شما باید این نتیجه را مشاهده کنید:

آموزش سی شارپ (قسمت بیست و ششم)

مبحث بعدی ما در این آموزش overwrite میباشد . تا الام ما مبحث overloading را دیدیم که متد های هم نامی بودند که ورودی های متفاوتی میگرفتند.

در قسمت گذشته ما سازنده های ShowPerson و ShowStudent و ShowTeacher را داشتیم و در اینجا نام این 3 سازنده را با یک نام یکسان Display جایگزین میکنیم. به محض تغییر این نام در تمام قسمت های برنامه هم تغییر میکند. بعد از ایجاد این تغییرات اگر شما دوباره برنامه را اجرا کنید برنامه با همان روند گذشته به درستی اجرا خواهد شد.

در ادامه مبحثی داریم به نام casting . casting بر دو نوع است implicit casting و explicit casting.

implicit casting زمانیست که شما میخواهید یک مقدار کوچکتر را در یک مقدار بزرگتر بریزید و این نوع casting در طول برنامه هیچ مشکلی بوجود نخواهد آمد.

explicit casting درست برعکس حالت قبل است. یعنی زمانی که شما بخواهید مقدار بزرگی را در مقدار کوچکتری بریزید. مسلما بخشی از مقدار ما از دست میرود.

برای درک بهتر این دو با یک مثال پیش میرویم. در کلاس program ما یک object میسازیم از کلاس person اما دیگر new نمیکنیم. برای انجام implicit casting ما object شاخته شده را برابر با object از قبل ساخته شده یعنی ostudent قرار میدهیم:

آموزش سی شارپ (قسمت بیست و ششم)

برای نمایش نتایج از console.writeline استفاده میکنیم و نتیجه آن با توجه به نتیجه object ساخته شده قبلی به شکل زیر متفاوت خواهد بود:

آموزش سی شارپ (قسمت بیست و ششم)

همانطور که میبینید ID در اینجا نمایش داده نمیشود. با توجه به شکل زیر میبینید که اعلام میکند این Display مربوط به person میباشد و person هم تنها دو ورودی دارد. چون کلاس پدر اجازه نمیدهد که زمان اجرا Display برای operson فراخوانی شود. برای حل این مشکل از virtual استفاده میکنیم. یعنی در کلاس person یا همان کلاس پدر در سازنده display قبل از مشخص کردن نوع سازنده virtual را اضافه میکنیم و در سایر کلاس هایی که از کلاس پدر ارث میبرند هم قبل از نوع display کلمه override را اضافه میکنیم.

بعد از گرفتن نتیجه و اجرای برنامه میبینید که نتایج بصورت صحیح و کامل هستند.

در اصل برای کلاس پدر از virtual و برای فرزندان از override استفاده میکنیم.

آموزش سی شارپ (قسمت بیست و ششم)

در قسمت بعد ما نوع دوم را بررسی میکنیم. این بار هم ما یک object جدید از کلاس student ایجاد میکنیم به نام ostudent2 و برابر با مقدار operson قرار میدهیم. در اینجا ما میخواهیم یک مقدار بزرگتر را در یک مقدار کوچک بریزیم. میبینید که با این پیام خطا رو به رو میشوید:

آموزش سی شارپ (قسمت بیست و ششم)

در این خطا اعلام میکند که نمیتواند بصورت implicity این تغییر را انجام دهد. زیرا که شما مقدار بزرگتری را میخواهید در یک مفدار کوچکتر بریزید.

برای اینکه اجازه ی این عملیات را ما به برنامه بدهیم باید بشکل زیر عمل کنیم:

آموزش سی شارپ (قسمت بیست و ششم)

علت این تفاوت این است که ما operson_2 را قبلا implicity cast کرده بودیم به کلاس student دیگر خطا نمیدهد. یعنی اگر شیء cast شده ی ابتدایی کلاس فرزند به پدر باشد اگر مجددا بخواهیم به کلاس پدر آن را cast کنیم مشکلی بوجود نخواهد آمد.

آموزش سی شارپ (قسمت بیست و ششم)

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

علی نعیمی

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

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