ساختار (Struct)
ساختارها یا struct انواع دادهای هستند که توسط کاربر تعریف میشوند (user-define) و میتوانند دارای فیلد و متد باشند. با ساختارها میتوان نوع دادهای خیلی سفارشی ایجاد کرد. فرض کنید میخواهیم دادهای ایجاد کنیم که نه تنها نام شخص را ذخیره کند بلکه سن و حقوق ماهیانه او را نیز در خود جای دهد. برای تعریف یک ساختار به صورت زیر عمل میکنیم :
struct StructName { member1; member2; member3; ... member4; }
برای تعریف ساختار از کلمه کلیدی struct استفاده میشود. برای نامگذاری ساختارها از روش نامگذاری struct استفاده میشود. اعضا در مثال بالا (member1-5) میتوانند متغیر باشند یا متد. در زیر مثالی از یک ساختار آمده است :
1: using System; 2: 3: public struct Employee 4: { 5: public string name; 6: public int age; 7: public decimal salary; 8: } 9: 10: public class Program 11: { 12: public static void Main() 13: { 14: Employee employee1; 15: Employee employee2; 16: 17: employee1.name = "Jack"; 18: employee1.age = 21; 19: employee1.salary = 1000; 20: 21: employee2.name = "Mark"; 22: employee2.age = 23; 23: employee2.salary = 800; 24: 25: Console.WriteLine("Employee 1 Details"); 26: Console.WriteLine("Name : {0}", employee1.name); 27: Console.WriteLine("Age : {0}", employee1.age); 28: Console.WriteLine("Salary: {0:C}", employee1.salary); 29: 30: Console.WriteLine(); //Seperator 31: 32: Console.WriteLine("Employee 2 Details"); 33: Console.WriteLine("Name : {0}", employee2.name); 34: Console.WriteLine("Age : {0}", employee2.age); 35: Console.WriteLine("Salary: {0:C}", employee2.salary); 36: } 37: }
Employee 1 Details Name : Jack Age : 21 Salary: $1000.00 Employee 2 Datails Name : Mike Age : 23 Salary: $800.00
برای درک بهتر، کد بالا را شرح میدهیم. در خطوط 8-3 یک ساختار تعریف شده است. به کلمه Public در هنگام تعریف توجه کنید. این کلمه کلیدی نشان میدهد که Employee در هر جای برنامه قابل دسترسی و استفاده باشد و حتی خارج از برنامه. Public یکی از سطوح دسترسی است که توضیحات بیشتر در مورد آن در درسهای آینده آمده است. قبل از نام ساختار از کلمه کلیدی struct استفاده میکنیم. نام ساختار نیز از روش نامگذاری پاسکال پیروی میکند. در داخل بدنه ساختار سه فیلد تعریف کردهایم. این سه فیلد مشخصات Employee (کارمند) مان را نشان میدهند. مثلاً یک کارمند دارای نام، سن و حقوق ماهانه میباشد. همچنین هر سه فیلد به صورت Public تعریف شدهاند بنابراین در خارج از ساختار نیز میتوان آنها را فراخوانی کرد. در خطوط 14 و 15 دو نمونه از ساختار Employee تعریف شده است. تعریف یک نمونه از ساختارها بسیار شبیه به تعریف یک متغیر معمولی است. ابتدا نوع ساختار و سپس نام آن را مشخص میکنید. در خطوط 17 تا 23 به فیلدهای مربوط به هر Employee مقادیری اختصاص میدهید. برای دسترسی به فیلدها در خارج از ساختار باید آنها را به صورت Public تعریف کنید. ابتدا نام متغیر را تایپ کرده و سپس علامت دات (.) و در آخر نام فیلد را مینویسیم.
وقتی که از عملگر دات استفاده میکنیم این عملگر اجازه دسترسی به اعضای مخصوص آن ساختار یا کلاس را به شما میدهد. در خطوط 25 تا 35 نشان داده شده که شما چطور میتوانید به مقادیر ذخیره شده در هر فیلد ساختار دسترسی یابید. ساختارها انواع مقداری هستند. این بدین معنی است که اگر مثلاً در مثال بالا Employee2 را برابر Employee1 قرار دهید، Employee2 همه مقادیر صفات Employee1 را به جای اینکه به آنها مراجعه کند، کپی برداری میکند. کلاس یک ساختار ساده است ولی از انواع مرجع به حساب میآید. در مورد کلاس در درسهای آینده توضیح خواهیم داد. میتوان به ساختار، متد هم اضافه کرد. مثال زیر اصلاح شده مثال قبل است.
1: using System; 2: 3: public struct Employee 4: { 5: public string name; 6: public int age; 7: public decimal salary; 8: 9: public void SayThanks() 10: { 11: Console.WriteLine("{0} thanked you!", name); 12: } 13: } 14: 15: public class Program 16: { 17: public static void Main() 18: { 19: Employee employee1; 20: Employee employee2; 21: 22: employee1.name = "Jack"; 23: employee1.age = 21; 24: employee1.salary = 1000; 25: 26: employee2.name = "Mark"; 27: employee2.age = 23; 28: employee2.salary = 800; 29: 30: Console.WriteLine("Employee 1 Details"); 31: Console.WriteLine("Name : {0}", employee1.name); 32: Console.WriteLine("Age : {0}", employee1.age); 33: Console.WriteLine("Salary: {0:C}", employee1.salary); 34: 35: employee1.SayThanks(); 36: 37: Console.WriteLine(); //Seperator 38: 39: Console.WriteLine("Employee 2 Details"); 40: Console.WriteLine("Name : {0}", employee2.name); 41: Console.WriteLine("Age : {0}", employee2.age); 42: Console.WriteLine("Salary: {0:C}", employee2.salary); 43: 44: employee2.SayThanks(); 45: } 46: }
Employee 1 Details Name : Jack Age : 21 Salary: $1000.00 Jack thanked you! Employee 2 Details Name : Mike Age : 23 Salary: $800.00 Mike thanked you!
در خطوط 9 تا 12 یک متد در داخل ساختار تعریف شده است. این متد یک پیام را در صفحه نمایش نشان میدهد و مقدار فیلد name را گرفته و یک پیام منحصر به فرد برای هر نمونه نشان میدهد. برای فراخوانی متد، به جای اینکه بعد از علامت دات نام فیلد را بنویسیم، نام متد را نوشته و بعد از آن همانطور که در مثال بالا مشاهده میکنید (خطوط 35 و 44) پرانتزها را قرار میدهیم و در صورتی که متد به آرگومان هم نیاز داشت در داخل پرانتز آنها را مینویسیم.
سلام واقعن ساعت خوبیه من در حال کار هرجا مشکل داشته باشم جوری توضیح داده میشه که کامل متوجه میشم خیلی عالی بود
سلام خسته نباشید من اشتراک خریدم ولی برام فعال نشده لطفا پیگیری کنید
سلام، مرسی… الان فعاله و می تونید استفاده کنید
سلام میگم چطور باید تو سی شارپ وقتی استراکت میزنیم …, بین ممبر های ساختار ارتبط ایجاد کنیم؟یعنی چطور باید به هم ربطشون بدیم؟ توی درس ساختمان داده با این مفهوم سرو کار داریم….
سلام، ممنون میشم سوالاتتونو تو بخش پرسش و پاسخ مطرح بفرمایید
با عرض سلام و خسته نباشید
من دچار مشکل شدم در اجرای برنامه
وقتی در visual studio برای enum یا struct کد میزنم و اونو اجرا میکنم سریع از برنامه(صفحه مشکی)میاد بیرون نمیدونم مشکل کجاست اگر میشه راهنمایی کنید
سلام، مرسی
وقتی میخواین کد رو اجرا کنید از دکمه های ترکیبی ctrl+f5 استفاده کنید یا آخر کدتون خط زیر رو بنویسید :
سلام ضمن تشکر از سایت عالیتون ، امکانش هست تعدادی پروژه برای تمرین تعریف کنید متناسب با مباحث؟
سلام، ممنون بابت لطفتون
چشم، یه کم سرم شلوغه، در اولین فرصت حتما این کار رو می کنم
سلام لطفا ساختار struct در array رو هم توضیح بدین.ممنون