سی شارپ

|

اموزش سی شارپ

با اموزش سی شارپ قسمت دوازدهم در خدمت شما هستیم.

این قسمت مربوط به بحث struct ها میباشد.struct ها مانند کلاس ها رفتار میکنند ولی دارای یکسری تفاوت ها با کلاس ها میباشند که در این مقالهبه آن ها اشاره میکنیم.

زمانی که شما از کلاس ها استفاده میکنید تمام آن چیزی که مورد نیاز میباشد مخصوصا در برنامه نویس سی شارپبرای شما انجام میشود ولی دانستن این نکته خالی از لطف نیست که struct ها به چه صورت عمل میکنند.

struct ها بیشتر در زبان سی پلاس پلاس (++c) مطرح میشوند به این دلیل که نیمه شی گرا بوده و یکسری فعالیت ها را برای شما ساده میکند.

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

ما برای تعریف یک struct بدین شکل عمل میکنیم که کلمه ی کلیدیه پابلیک (public) را قرار میدهیم و نام struct را مینویسیم دقیقا مانند کلاس یک نامی برای آن در نظر میگیریم.حالا اینکه که شما بیاید فیلدی را تعریف کنید مانند این دو فیلدی که ما داریم وهمان ابتدا بخاهید مقدار دهی کنید برنامه به شما خطا میدهد که این یکی از تفاوت هایی است کلاس ها با struct ها دارند یعنی در کلاس ها شما میتوانستید فیلد خود را در همان ابتدای کار ایشیالایز کنید و به آن مقدار بدهید ولی در struct ها به این شکل نیست و نمی توانید در ابتدا ی کار مقداری برای فیلدها در نظر بگیرید.

نکته بعدی این است که ما deafault construcor که در کلاس ها به صورت مخفی داشتیم و اگر خودمان میخاستیم آنرا بنویسیم هیچ گونه خطایی به نمیداد در struc ها به این صورت نیست یعنی شما default constructor را دارید ولی اگر خودتان بخواهید آن را بنویسید برنامه به شما پیغام خطا میدهد یعنی شما نباید default constructor را بنویسید ولی به صورت مخفی بدانید که این کان استرکتور را دارید.

همچنین اگر شما بخواهید سازنده ی دیگری تعریف کنید به غیر از آن سازنده ی مخفی که در اصل default constructor شما را تشکیل میدهد شما باید تمامی فیلد های که در بدنه ی کلاس تعریف کردید در خود سازنده مقدار دهی کنید.

به عنوان مثال ما در اینجا دارای دو فیلد میباشم که(full name ) و (age) میباشد،اگر من یک سازنده ایی داشته باشم که فقط age یا فقط full nameرا از من بگیرد برنامه به من خطا میدهد که یکی دیگر از تفاوت های struct ها با کلاس ها میباشد.

شکل صحیح استفاده از کان استرکتور به این شکل است که در اینجا میبینید،ما سازنده را با دو ورودی یعنی دو فیلدی که داشتیم در اینجا تعریف کردیم.خب همانطور که خدمت شما عرض کردیم برای اینکه ما سازنده ها را داشته باشیم در struct ها باید همه ی فیلد ها را مقدار دهی کنیم که در اینجا به آن اشاره کردیم.

c sharp

برای متد ها فرقی با خود کلاس ها ندارند متد ها را میتوانیم به هر شکلی که می خواهیم پیاده سازی کنیم دقیقا مانند کلاس ها ما اینجا دارای متد(void) میباشیم که قرار است full name را برای ما نمایش دهد و یک متد show info که قرار است برای ما هم full name و هم age را نمایش بدهد که این کدهایی که قبل از full name و age نوشتم که در قسمت های قبلی آموزش توضیح دادم.

اموزش سی شارپ

خب من در اینجا یک break point قرار دادم که ما تفاوت ها را به شکل کامل شاهد باشیم در اینجا break point قرار دادم f5 را میزنم که برنامه من به این خط کد برسد که حالا خدمتتان این کد را توضیح میدهم.

ما از struct person یک object ایجاد کردیم و آن را new کردیم.حالا age این struct رو که یکی از فیلد ها هست مقدار ۲۰ داده شده وfull name نیز وارد شده وحالا خواستم که show info که یک متد بود برای من فراخونی بشه،وارد show info میشم و اطلاعات مربوط به صورت زیر نمایش داده میشه.حالا من f11 میزنم تا یک لاین داشته باشیم،p2 را داریم.p2 را با سازنده ایی که ۲ ورودی را میگرفت( age & full name) و show info و show full name را فراخوانی کردیم

.برای p3 بهمین شکل من new کردم،full name را دستی وارد کردم و age را وارد نکردم حالا show info و show full name را فراخوانی میکنم و همانطور که میبینید که age در اینجا مقدار 0 برایش در نظر میگیرد به این دلیل که ما همانطور که خدمتتون عرض کردیم وقتی که یک struct را new میکنید و یکی از فیلد ها را مقدار دهی نمیکنید مقدار آن فیلد عددی به صورت 0 در نظر گرفته میشود.

یکی دیگر از تفاوت های struct با کلاس است،که کلاس را شما حتما باید new میکردید مگر آن که به صورت static تعریف میکردید.

ما یک p5 داریم که آن را نیز new نکردیم.struct را که شما new نمیکنید در قسمت p3 ما new کرده بودیم و age را به آن نداده بودیم بعد show info زدیم و show full name را زدیم و age را خودش به صورت پیش فرض 0 داد.ولی وقتی که شما به این شکل struct را تعریف میکنید و new نمیکنید آن را و یکی از فیلد ها را مقدار دهی نمیکنید حالا اگر از آیتمی بخواهید استفاده کنید مانند show info و یا show full name چون age تعریف نشده در این ۲ متد اگر یکی از اعضای این struct را که یکی از فیلد های آن تعریف نشده و new هم نشده بخواهیم استفاده کنیم با پیغام خطلا مواجه خواهیم شد.تنها راه کار که شما بخواهید اگر فیلدی را مقدار دهی نکرده اید و بخواهید اطلاعات فیلدهای دیگر را داشته باشید این است که به صورت دستی بنویسید که full name را که اینجا مقدار دهی کردید به آن دسترسی داشته باشید و ببینید که مقدار آن چقدر است.و همانطور که گفته شد چون ما در این جا age را مقدار ندادیم و new هم نکردیم نمیتوانیم از show info،show full name و همچنین صراحتا age را برای ما نمایش بدهد چرا که new نشده و مقدار 0 هم یک مقدار نال است و پیغام خطا به ما میدهد.

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

علی نعیمی

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

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