آموزش نوع داده struct در سی شارپ

Ratings
(0)

کلمه ی struct مخفف کلمه ی structure به معنی ساختار است. یعنی struct ها، ساختارهای داده ای هستند که از چند قطعه داده تشکیل شده اند که احتمالاً نوع های مختلفی دارند. آنها به ما امکان می کنند تا نوع های متغیر خودمان را بر اساس این ساختار تعریف کنیم. 

بعنوان مثال، فرض کنید که می خواهیم مسیر(route) یک مکان را از یک نقطه ی شروع ذخیره کنیم، به طوری که این مسیر شامل یک جهت و یک فاصله به مایل(miles) باشد. برای سادگی، می توانید فرض کنید که جهت مورد نظر یکی از نقاط قطب نما است(به طوری که بتوان آن را با استفاده از enum به نام به orientation که دربخش آخر ارائه شد(از مقاله قبلی)، نمایش داده شود)، و فاصله به مایل(mile) می تواند به صورت یک نوع double ارائه شود. برای انجام این کار، می توانیم از دو متغیر مجزا با استفاده از کدی که قبلا مشاهده کرده ایم، استفاده کنیم:

orientation myDirection;
double myDistance;

با استفاده کردن از این دو متغیر، مشکلی پیش نمی آید اما بسیار ساده تر است که این اطلاعات را در یک مکان ذخیره کنیم(به خصوص وقتی که استفاده از چندین مسیر یا route ضروری است).   


تعریف ساختارها در سی شارپ

برای تعریف یک ساختار در سی شارپ، باید از کلمه ی کلیدی struct به صورت زیر استفاده کنیم:

struct Coordinate
{
    public int x;
    public int y;
}

در کدهای درون ساختار بالا، دو متغیر تعریف کرده ایم. که به آنها عضو های داده‌ ی ساختار گفته می شود. هریک از این متغیرها به صورت زیر هستند:

<نام> <نوع> <سطح دسترسی>

برای اینکه به کدها امکان دهیم که این ساختار را فراخوانی کنند تا به اعضای داده ی آن دسترسی داشته باشند، از کلمه ی کلیدی public استفاده کرده ایم. بعنوان مثال:

struct route
{
  public orientation direction;
  public double distance;
}

وقتی که یک نوع را برای یک struct را تعریف کرده باشیم، از آن برای تعریف متغیرهایی از این نوع جدید استفاده می کنیم:

route myRoute;

علاوه بر این، ما به عضوهای داده ی این متغیر  مرکب، از طریق علامت نقطه دسترسی داریم:

myRoute.direction = orientation.north;
myRoute.distance = 2.5;

این موضوع در مثال خودتان امتحان کنید زیر نشان داده شده است، به طوری که از enum ای به نام orientation در مثال خودتان امتخان کنید قبلی، استفاده شده است، با ساختار route که اخیرا نشان داده شد، استفاده شده است. آنگاه این ساختار را دستکاری می کنیم تا ببینید و تجربه کنید که ساختارها چگونه کار می کنند. 


خودتان امتحان کنید: استفاده از یک struct در سی شارپ

1. یک برنامه ی کنسول دیگر به نام Ch05Ex03 ایجاد کنید و آن را در آدرس زیر ذخیره کنید:

C:\BeginningCSharp7\Chapter05

2. کد زیر را به فایل Program.cs اضافه کنید:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
using static System.Convert;

namespace Ch05Ex03
{
    enum orientation : byte
    {
        north = 1,
        south = 2,
        east = 3,
        west = 4
    }
    struct route
    {
        public orientation direction;
        public double distance;
    }
    class Program
    {
        static void Main(string[] args)
        {
            route myRoute;
            int myDirection = -1;
            double myDistance;
            WriteLine("1) North\n2) South\n3) East\n4) West");
            do
            {
                WriteLine("Select a direction:");
                myDirection = ToInt32(ReadLine());
            }
            while ((myDirection < 1) || (myDirection > 4));
            WriteLine("Input a distance:");
            myDistance = ToDouble(ReadLine());
            myRoute.direction = (orientation)myDirection;
            myRoute.distance = myDistance;
            WriteLine($"myRoute specifies a direction of {myRoute.direction} " +
                   $"and a distance of {myRoute.distance}");
            ReadKey();
        }
    }

}

3. کد را اجرا کنید؛ با وارد کردن یک عدد از 1 تا 4 یک جهت(direction) را انتخاب کنید و یک فاصله(distance) را وارد کنید. نتیجه در تصویر 5.7 نشان داده شده است.

 (تصویر 5.7)کد مثال ایجاد ساختار در سی شارپ

 


توضیح کدهای برنامه ی بالا

ساختارها، مانند enumها، در بیرون از بدنه ی main از کدها قرار می گیرند. ما ساختاری به نام route را در درون اعلان namespace قرار می دهیم. همرا با یک enum به نام orientation که مورد استفاده قرار گرفته است:

enum orientation: byte
{
  north = 1,
  south = 2,
  east = 3,
  west = 4
}
struct route
{
  public orientation direction;
  public double distance;
}

 در بدنه ی اصلی در این کد، یک ساختار مانند مثال هایی که قبلا دیده اید قرار دارد که یک ورودی را از کاربر درخواست می کند و آن را نمایش می دهد. با قرار دادن جهت(direction) در یک حلقه ی do ، یک اعتبارسنجی ساده از ورودی کاربر انجام می شود.  که هر مقداری که یک عدد صحیح بین 1 و 4 نباشد را رد می کند. با مقادیری که به گونه‌ای انتخاب شده‌اند که برای انتساب آسان، به اعضای enum مرتبط می شوند. 


نکته: ورودی هایی(Input) که نمی توانند به صورت یک عدد صحیح(integer) تفسیر شوند، باعث ایجاد یک خطا خواهند شد. در آینده در این کتاب، خواهید دید که چرا این اتفاق می افتد و در مورد آن باید چه کاری انجام داد. 


 یک نکته ی جالب این است که وقتی که ما به اعضای route اشاره می کنیم، آنها دقیقاً مانند روشی که به اعضای متغیرها با همین نوع اشاره می کنیم رفتار می کنند؛

 The interesting point to note is that when you refer to members of route they are treated exactly the
same way that variables of the same type as the members are.

 

انتساب مورد نظر به صورت زیر است:

myRoute.direction = (orientation)myDirection;
myRoute.distance = myDistance;

 ما به سادگی می توانیم مقدا ورودی را مستقیماً در myRoute.distance قرار دهیم، بدون هیچ گونه عوارض جانبی، به صورت زیر:

myRoute.distance = ToDouble(ReadLine());

این مرحله اضافی امکان اعتبارسنجی بیشتری را فراهم می‌کند، اگرچه در این کد هیچ کدام انجام نمی‌شود. هرگونه دسترسی به اعضای یک struct به همین شیوه رفتار می کند. می‌توان گفت عباراتی به شکل <structVar>.<memberVar> را می توانیم به صورت یک متغیر از نوع <memberVar> ارزیابی کنیم. 

 

  • بازدید: 75

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.

ارسال