سی شارپ - ساختار

در # C ساختار از نوع داده و نوع مقدار می باشد. به شما کمک می کند تا یک متغیر مجزا بسازید که داده ی مربوط به انواع مختلف داده را در خود دارد. کلمه ی کلیدی struct برای ایجاد یک ساختار استفاده می شود.

ساختارها برای ارائه ی یک ثبت استفاده می شوند. تصور کنید که می خواهید بخشی از کتابهایتان را در کتابخانه نگهداری کنید. ممکن است بخواهید هرکدام از ویژگی های زیر را در مورد هر کتاب طبقه بندی کنید.

  • عنوان
  • نویسنده
  • موضوع
  • IDکتاب

تعریف یک ساختار

برای تعریف یک ساختار شما باید از دستور struct استفاده کنید. دستور struct نوع جدید داده را با بیشتر از یک عضو برای برنامه ی شما تعریف می کند.

به عنوان مثال اینجا روشی است که شما ساختار Book را تعریف می کنید.

struct Books
{
   public string title;
   public string author;
   public string subject;
   public int book_id;
};  

در زیر نحوه ی استفاده از ساختار توضیح داده شده است

using System;
struct Books
{
   public string title;
   public string author;
   public string subject;
   public int book_id;
};  

public class testStructure
{
   public static void Main(string[] args)
   {

      Books Book1;   /* Declare Book1 of type Book */
      Books Book2;   /* Declare Book2 of type Book */

      /* book 1 specification */
      Book1.title = "C Programming";
      Book1.author = "Nuha Ali"; 
      Book1.subject = "C Programming Tutorial";
      Book1.book_id = 6495407;

      /* book 2 specification */
      Book2.title = "Telecom Billing";
      Book2.author = "Zara Ali";
      Book2.subject =  "Telecom Billing Tutorial";
      Book2.book_id = 6495700;

      /* print Book1 info */
      Console.WriteLine( "Book 1 title : {0}", Book1.title);
      Console.WriteLine("Book 1 author : {0}", Book1.author);
      Console.WriteLine("Book 1 subject : {0}", Book1.subject);
      Console.WriteLine("Book 1 book_id :{0}", Book1.book_id);

      /* print Book2 info */
      Console.WriteLine("Book 2 title : {0}", Book2.title);
      Console.WriteLine("Book 2 author : {0}", Book2.author);
      Console.WriteLine("Book 2 subject : {0}", Book2.subject);
      Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);       

      Console.ReadKey();

   }
}

نتیجه ای اجرای برنامه ی بالا به شکل زیر است

Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700

ویژگی های ساختارهای C#

شما تقریبا ازیک ساختار ساده به نام Book استفاده کرده اید. ساختارها در C# کاملا متفاوت از نوع آن در C یا C++ می باشند. ساختارهای C# دارای ویژگی های زیرهستند .

  • ساختارهای می توانند متد، فیلد، ایندکسر، خصوصیت، متدهای اپراتور و رویداد داشته بشند.
  • ساختارها می توانند سازنده های تعریف شده داشته باشند، اما ویران کننده نه. به هرحال شما نمی توانید یک سازنده ی پیش فرض برای یک ساختار تعریف کنید. سازنده ی پیش فرض به طور خودکار تعریف می شود و قابل تغییر نیست.
  • بر خلاف کلاس ها، ساختارها نمی توانند ساختارها یا گروه های دیگر را به ارث ببرند.
  • ساختارها نمی توانند به عنوان یک پایه یا اساس برای ساختارها و یا گروه های دیگر استفاده شوند.
  • یک ساختار می تواند یک یا چند اینترفیس را پیاده سازی کنند.
  • اعضای ساختار نمی توانند به شکل abstract ، virtualو یا protected تعریف شوند.
  • وقتی که شما یک شی struct را بااستفاده از دستورNew ایجاد می کنید، ساختار،شی ایجاد شده را می گیرد و سازنده ی مناسب فراخوانده می شود. برخلاف کلاس ها، struct ها می توانند بدون استفاده از دستور New به عنوان نمونه ذکر شوند.
  • اگر دستور New استفاده نشود، فیلدها بی تکلیف باقی مانده و اشیا تا زمانی که همه ی فیلدها شروع به کار نکرده اند، استفاده نمی شود.

کلاس در مقابل ساختار (Class Vs. Structures)

کلاس ها و ساختارها دارای تفاوت های اساسی زیر هستند.

  • گروه ها از نوع مرجع و ساختارها از نوع مقدار هستند.
  • ساختارها وراثت را پشتیبانی نمی کنند.
  • ساختارها نمی توانند سازنده ی پیش فرض داشته باشند.

در ارتباط با توضیحات بالا اجازه بدهید مثال قبل را دوباره بنویسیم.

using System;
struct Books
{
   private string title;
   private string author;
   private string subject;
   private int book_id;
   public void getValues(string t, string a, string s, int id)
   {
      title = t;
      author = a;
      subject = s;
      book_id = id;
   }
   public void display()
   {
      Console.WriteLine("Title : {0}", title);
      Console.WriteLine("Author : {0}", author);
      Console.WriteLine("Subject : {0}", subject);
      Console.WriteLine("Book_id :{0}", book_id);
   }

};  

public class testStructure
{
   public static void Main(string[] args)
   {

      Books Book1 = new Books();   /* Declare Book1 of type Book */
      Books Book2 = new Books();   /* Declare Book2 of type Book */

      /* book 1 specification */
      Book1.getValues("C Programming",
      "Nuha Ali", "C Programming Tutorial",6495407);

      /* book 2 specification */
      Book2.getValues("Telecom Billing",
      "Zara Ali", "Telecom Billing Tutorial", 6495700);

      /* print Book1 info */
      Book1.display();

      /* print Book2 info */
      Book2.display(); 

      Console.ReadKey();

   }
}

نتیجه ی اجرا کد بالا به صورت زیر است:

Title : C Programming
Author : Nuha Ali
Subject : C Programming Tutorial
Book_id : 6495407
Title : Telecom Billing
Author : Zara Ali
Subject : Telecom Billing Tutorial
Book_id : 6495700