تبلیغات در اینترنتclose
آموزش کار با Structs (ساختارها) در زبان C#
::: در حال بارگیری لطفا صبر کنید :::

نام کاربری :   پسورد :



تابلو اعلانات

◘ نتایج مسابقات انتخاب مدیر برای انجمن ویدئو لرن ◘


تعداد بازدید : 261
نویسنده پیام
fns4565 آفلاین



ارسال‌ها: 25
عضویت: 26 /1 /1395
تشکر شده: 15
آموزش کار با Structs (ساختارها) در زبان C#
ساختارها یا Structs یک جایگزین سبک حجم (light weight) برای کلاس ها Class در زبان C# هستند. دلیل بیان این مسئله، کمی نیازمند بحث تکنیکال است، اما اگر بخواهیم خلاصه بیان کنیم، نمونه های ساخته شده از یک کلاس instances Class (بر روی حافظه) در یک ساختار درختی یا heap قرار می گیرند، در حالی که نمونه های ساخته شده از یک Structs به صورت Stack ذخیره می شوند.
علاوه بر این، در ساختار Struct بر عکس Class ها، با مرجع یا refrence به یک struct کار نمی کنید، بلکه مستقیما به نمونه ساخته شده از structs دسترسی دارید. این همچنین به این معنی است که وقتی شما یک struct را به عنوان پارامتر به تابع پاس می دهید، به صورت value call by فرستاده می شود نه call by refrence. در مورد تفاوت این روش در درس ارسال پارامترها به توابع زبان C# کامل صحبت کردیم. جهت دریافت اطلاعات بیشتر به بخش مذکور رجوع نمایید.

نکته :زمانی که می خواهید دیتا ساده تری را نشان دهید، بهتر از ساختار Struct استفاده، مخصوصا در مواقعی که می خواهید نسخه های زیادی از آن ها را مقداردهی کنید.
مثال های زیادی در چهارچوب کاری .NET وجود دارد که مایکروسافت از ساختار struct به جای کلاس ها استفاده کرده، مثل اشیای Point، Rectangle و یا Color struct.
در مرحله اول، یک مثال عملی از نحوه تعریف و استفاده از struct ها را به شما نشان داده و سپس درباره محدودیت های استفاده از ان ها به جای کلاس ها صحبت خواهیم کرد :
کد:
class Program
{
static void Main(string[] args)
{
Car car;

car = new Car("Blue");
Console.WriteLine(car.Describe());

car = new Car("Red");
Console.WriteLine(car.Describe());

Console.ReadKey();
}
}

struct Car
{
private string color;

public Car(string color)
{
this.color = color;
}

public string Describe()
{
return "This car is " + Color;
}

public string Color
{
get { return color; }
set { color = value; }
}
}


اگر به مثال خوب دقت کرده باشید، متوجه می شوید این همان کد مثالی است که در بخش معرفی کلاس ها در C# به کار بردیم، با این تفاوت که از struct به جای class در بخش دوم ان استفاده کرده ایم. این مثال به خوبی نشان می دهد که این دو مفهوم چقدر شبیه هم هستند. اما با توجه به توضیحی که در ابتدای درس عنوان کردیم، این دو مفهوم چگونه با هم فرق دارند؟
اول از همه، فیلدها (fields) را در ساختارهای struct نمی توان مقداردهی اولیه کرد، یعنی به وسیله کد متنی کد زیر نمی توان یک member مقدار داد :
کد:
private string color = "Blue";


اگر یک تابع سازنده یا Constructor را برای struct تعیین کنید، بایستی کلیه فیلدها قبل از خروج از Constructor مقداردهی شوند. خود ساختار struct دارای یک تابع سازنده یا default Constructor می باشد، اما اگر به صورت دستی بخواهید تابع سازنده آن را تعیین کنید، بایستی تمامی فیلدها را در تعریف تابع سازنده، مقداردهی کنید. از طرف دیگر این بدین معناست که شما نمی توانید یک تابع سازنده بدون پارامتر را برای struct تعیین نمایید، بلکه تمامی توابع سازنده struct ها حداقل بایستی دارای یک پارامتر باشند. در کد مثال فوق، ما یک مقدار مشخصی را برای فیلد color تعیین نمودیم، که اگر این کار را انجام نمی دادیم، کامپایلر خطا صادر می کرد.
یک struct نمی تواند از سایر کلاس ها یا struct های دیگر به ارث برود (inherit) و کلاس ها هم نمی توانند از struct ها به ارث برده شوند. Structs همچنین از Interface ها پشتیبانی می کنند که بدین معناست که هر struct می تواند Interface های مورد نظر خود را پیاده سازی کند.
سه شنبه 02 آذر 1395 - 09:51
ارسال پیام نقل قول تشکر / موافقم / آفرین گزارش
1 کاربر از fns4565 به خاطر این مطلب مفید تشکر کرده اند : karim_orooji ,


تازه سازي پاسخ ها



برای ارسال پاسخ ابتدا باید لوگین یا ثبت نام کنید.



تاپیک های مرتبط
موضوع تاریخ تعداد پاسخ آخرین ارسال بازدید
[Post_Title] [Post_Date] [Post_Answer] [Post_Last_User] [Post_Hit]
پرش :
صفحه اصلی | انجمن | ورود | عضویت | خوراک | نقشه | تماس با ما | طراح