با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش #c ، را دنبال می کنند. در بخش قبلی در مورد حلقه تکرار do while صحبت کرده و ساختار آن را بررسی کردیم. در این جلسه قصد داریم شما را با ساختارها (struct) در زبان #C و تفاوت های بین کلاس و ساختار در سی شارپ آشنا کنیم.
در مورد class در بخشهای قبلی صحبت کردیم.گفتیم کلاس مرجع محور (by reference) است ولی struct مقدار محور است .
یک ساختار یک “نوع مقدار” “value type” است که می تواند شامل سازنده ها، ثابت ها، فیلد ها، متد ها، پراپرتی ها ، شاخص ها، عملگرها، رویدادها و … باشد .
ساختار را می توان با استفاده از کلمه کلیدی struct تعریف کرد.
1 2 3 4 5 6 | public struct Discounts { public int Cloths { get; set; } public int HomeDecor { get; set; } public int Grocery { get; set; } } |
ساختار را می توان با یا بدون کلمه کلیدی new استفاده کرد. مانند مثال زیر :
1 2 3 4 5 | Discounts saleDiscounts = new Discounts(); saleDiscounts.Cloths = 10; saleDiscounts.HomeDecor = 5; saleDiscounts.Grocery = 2; |
ساختارها مقدار محور بوده و بنابراین سریعتر از یک شیء کلاس هستند.
هر زمان که بخواهید داده ها را ذخیره کنید، از struct استفاده کنید.
به طور کلی ساختارها برای برنامه نویسی بازی (game programming) مناسب هستند.
انتقال یک شیء کلاس نسبت به یک ساختار ساده تر است.بنابراین وقتی که داده ها را در میان رشته ای اطلاعات یا به سایر کلاس ها منتقل می کنید ، از struct استفاده نکنید .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | struct Point { private int _x, _y; public int x, y; public static int X, Y; public int XPoint { get { return _x; } set { _x = value; PointChanged(_x); } } public int YPoint { get { return _y; } set { _y = value; PointChanged(_y); } } public event Action<int> PointChanged; public void PrintPoints() { Console.WriteLine(" x: {0}, y: {1}", _x, _y); } public static void StaticMethod() { Console.WriteLine("Inside Static method"); } } |
ساختار فوق شامل فیلدهای خصوصی x , _y_ ، فیلدهای عمومی x و y، فیلدهای ایستا X و Y، پراپرتی های عمومی XPoint و YPoint و رویداد PointChanged است
این ساختار همچنین شامل متد های استاتیک و غیر استاتیک می باشد.
توجه داشته باشید هر زمان که XPoint یا YPoint تغییر می کنند رویداد PointChanged اتفاق می افتد.
در کد زیر، ابتدا ساختار Point را با کلید واژه new ایجاد کرده، و همچنین رویداد PointChanged را مدیریت می کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Program { static void StructEventHandler(int point) { Console.WriteLine("Point changed to {0}", point); } static void Main(string[] args) { Point.StaticMethod(); Point p = new Point(); p.PointChanged += StructEventHandler; p.XPoint = 123; p.PrintPoints(); } } |
خروجی :
1 2 3 | Inside Static Method Point changed to 123 X: 123, y: 0 |
توجه داشته باشید که اگر شما می خواهید از پراپرتی ها، متد ها یا رویدادها استفاده کنید، باید ساختار را با کلیدواژه new استفاده کنید. در زیر یک خطای زمان کامپایل رخ خواهد داد:
1 2 3 | Point pto; pto.XPoint = 100; // compile time error |
در این قسمت با ساختارها (structs) در زبان #C آشنا شدید .
در قسمت بعد شما را با enum ها در این زبان آشنا خواهیم کرد.
علی
با سلام و خسته نباشید ،سوالی داشتم از خدمتتون چطوری میشه فایل pdf ها رو دریافت کرد؟
پی وی لرن
ممنون سلامت باشید
شما می توانید pdf هر دوره را از طریق منوی اصلی سایت از بخش دوره های آموزشی ( PDF ) دریافت نمائید.