ساختار (Struct) در سی شارپ

تیم تحریریه 1403/09/03 0 26
لینک کوتاه https://zoheirsoftware.com/z/6d01bfe5d |
ساختار (Struct) در سی شارپ,ویژگی‌های کلیدی Struct,ایجاد یک ساختار (Struct)

آموزش  ساختار (Struct) در سی‌شارپ

در برنامه‌نویسی سی‌شارپ ، ساختار (Struct) یکی از انواع داده‌ای است که می‌توانید برای تعریف نوع داده دلخواه خود از آن استفاده کنید.

Struct ها برای ایجاد اشیاء سبک و ساده که نیازی به ارث‌بری ندارند، طراحی شده‌اند. در این مقاله به صورت کامل و کاربردی با ساختار (Struct) آشنا می‌شویم.

ساختار یا Struct (مخفف Structure) در سی‌شارپ، یک نوع داده‌ی مقدار (Value Type) است که برای نگهداری داده‌ها و رفتار مرتبط با آن‌ها استفاده می‌شود.

Struct‌ها شباهت زیادی به کلاس‌ها (Class) دارند اما از نظر استفاده و کارایی تفاوت‌هایی اساسی با کلاس‌ها دارند.

Struct‌ها معمولاً برای اشیاء کوچک و سبک استفاده می‌شوند.

 

آموزش ساختار (Struct) در سی‌شارپ

 

 

ویژگی‌های کلیدی Struct

  • Value Type

    Struct ها از نوع مقدار هستند و داده‌ها را مستقیماً ذخیره می‌کنند، برخلاف کلاس‌ها که از نوع مرجع (Reference Type) هستند.
  • بدون ارث‌بری

    Struct‌ها نمی‌توانند از کلاس‌ها یا سایر ساختارها ارث‌بری کنند.
  • سبک و ساده

    برای داده‌هایی که نیاز به سربار (Overhead) حافظه زیادی ندارند، ایده‌آل هستند.
  • تخصیص حافظه در استک (Stack)

    Struct‌ها به صورت پیش‌فرض در استک (Stack) ذخیره می‌شوند، نه در هیپ (Heap).
  • امکان تعریف متدها، پراپرتی‌ها، ایندکسرها، و سازنده‌ها

    در Struct‌ها می‌توان متدها و پراپرتی‌های مختلف تعریف کرد، مشابه کلاس‌ها.

 

ویژگی‌های کلیدی Struct

 

 

ایجاد یک ساختار (Struct)

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

struct StructName
{
    // اعضای Struct
    public int Field1;
    public string Field2;

    // Constructor
    public StructName(int field1, string field2)
    {
        Field1 = field1;
        Field2 = field2;
    }

    // Method
    public void DisplayInfo()
    {
        Console.WriteLine($"Field1: {Field1}, Field2: {Field2}");
    }
}


مثال ساده: تعریف یک ساختار برای یک نقطه (Point)

struct Point
{
    public int X;
    public int Y;

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }

    public void Display()
    {
        Console.WriteLine($"Point: ({X}, {Y})");
    }
}

class Program
{
    static void Main()
    {
        Point p = new Point(10, 20);
        p.Display();
    }
}


خروجی:

 

Point: (10, 20)


انواع Struct در سی شارپ

Struct می‌تواند شامل انواع  زیر باشد:

  • فیلدها (Fields)

    متغیرهایی که داده‌های مرتبط با Struct را نگه می‌دارند.
  • سازنده‌ها (Constructors)

    برای مقداردهی اولیه به اعضای Struct.
  • متدها (Methods)

    برای اجرای عملیات مرتبط با داده‌ها.
  • پراپرتی‌ها (Properties)

    برای دسترسی ایمن به فیلدها.
  • ایندکسرها (Indexers)

    برای دسترسی به داده‌ها با استفاده از اندیس.
  • ثابت‌ها (Constants)

    داده‌های ثابت که مقدارشان تغییر نمی‌کند.

 

انواع Struct در سی شارپ

مثال از انواع Struct در سی شارپ

  • فیلدها

فیلدها متغیرهایی هستند که در Struct تعریف می‌شوند:

 

struct Rectangle
{
    public int Width;
    public int Height;
}

 

  • سازنده‌ها

سازنده‌ها برای مقداردهی اولیه به فیلدها استفاده می‌شوند. در Struct‌ها، سازنده پیش‌فرض وجود ندارد و باید تمام فیلدها در سازنده مقداردهی شوند:

struct Rectangle
{
    public int Width;
    public int Height;

    public Rectangle(int width, int height)
    {
        Width = width;
        Height = height;
    }
}

 

  • متدها

متدها رفتار مرتبط با Struct را پیاده‌سازی می‌کنند:

struct Rectangle
{
    public int Width;
    public int Height;

    public int CalculateArea()
    {
        return Width * Height;
    }
}

 

  • پراپرتی‌ها

پراپرتی‌ها برای دسترسی ایمن به فیلدها استفاده می‌شوند:

struct Rectangle
{
    private int width;
    private int height;

    public int Width
    {
        get { return width; }
        set { width = value; }
    }

    public int Height
    {
        get { return height; }
        set { height = value; }
    }
}


استفاده از Struct در برنامه نویسی

  • ایجاد و مقداردهی یک Struct

برای استفاده از یک Struct، ابتدا باید نمونه‌ای از آن ایجاد کنیم. نمونه‌های Struct به صورت مقداردهی شده و بدون استفاده از کلیدواژه new نیز قابل استفاده هستند:

struct Point
{
    public int X;
    public int Y;
}

class Program
{
    static void Main()
    {
        Point p;
        p.X = 5;
        p.Y = 10;

        Console.WriteLine($"X: {p.X}, Y: {p.Y}");
    }
}



نکته: اگر از new استفاده نکنید، باید همه فیلدهای Struct را مقداردهی کنید.

  • کپی‌برداری در Struct

یکی از ویژگی‌های Struct این است که کپی آن‌ها به صورت مقدار (By Value) انجام می‌شود:

struct Point
{
    public int X;
    public int Y;
}

class Program
{
    static void Main()
    {
        Point p1 = new Point { X = 10, Y = 20 };
        Point p2 = p1;

        p2.X = 30;

        Console.WriteLine($"p1.X: {p1.X}"); // خروجی: 10
        Console.WriteLine($"p2.X: {p2.X}"); // خروجی: 30
    }
}



در این مثال، تغییر مقدار p2 تاثیری روی p1 ندارد، زیرا Struct‌ها مقدارها را کپی می‌کنند.

  • ساختار به‌عنوان پارامتر متد

می‌توان Struct را به عنوان پارامتر به متدها ارسال کرد. ارسال به صورت By Value یا By Reference انجام می‌شود:

ارسال By Value:

void Modify(Point p)
{
    p.X = 50;
}
ارسال By Reference:
csharp
Copy code
void Modify(ref Point p)
{
    p.X = 50;
}



 

 

 

"با دوره‌های تخصصی سی شارپ ما، مهارت‌هایی کسب کنید که شما را به یک برنامه‌نویس حرفه‌ای و مورد تقاضا در بازار تبدیل می‌کند!"

برای آموزش کامل و جامع Struct  در سی شارپ از اینجا وارد بخش دوره آموزشی ما شوید

 

 

 

مثال پروژه محور از ساختار (Struct) در سی شارپ

پروژه نمونه: مدیریت اطلاعات دانشجو با استفاده از Struct در سی‌شارپ

در این پروژه، از یک ساختار (Struct) برای مدیریت اطلاعات دانشجویان استفاده می‌کنیم. اطلاعات هر دانشجو شامل نام، شماره دانشجویی، رشته تحصیلی و معدل است. کاربر می‌تواند اطلاعات چند دانشجو را وارد کرده و سپس لیستی از اطلاعات دانشجویان مشاهده کند.

کد پروژه:

using System;

namespace StudentManagement
{
    // تعریف ساختار دانشجو
    struct Student
    {
        public int StudentId;    // شماره دانشجویی
        public string Name;      // نام دانشجو
        public string Major;     // رشته تحصیلی
        public double GPA;       // معدل

        // سازنده برای مقداردهی اولیه
        public Student(int studentId, string name, string major, double gpa)
        {
            StudentId = studentId;
            Name = name;
            Major = major;
            GPA = gpa;
        }

        // متد نمایش اطلاعات دانشجو
        public void DisplayInfo()
        {
            Console.WriteLine($"شماره دانشجویی: {StudentId}, نام: {Name}, رشته: {Major}, معدل: {GPA:F2}");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("به سیستم مدیریت دانشجویان خوش آمدید!");

            // درخواست تعداد دانشجویان
            Console.Write("تعداد دانشجویانی که می‌خواهید وارد کنید: ");
            int studentCount = int.Parse(Console.ReadLine());

            // ایجاد آرایه‌ای از Struct برای ذخیره اطلاعات دانشجویان
            Student[] students = new Student[studentCount];

            // دریافت اطلاعات دانشجویان
            for (int i = 0; i < studentCount; i++)
            {
                Console.WriteLine($"\nدانشجوی شماره {i + 1}:");
                Console.Write("شماره دانشجویی: ");
                int studentId = int.Parse(Console.ReadLine());

                Console.Write("نام: ");
                string name = Console.ReadLine();

                Console.Write("رشته تحصیلی: ");
                string major = Console.ReadLine();

                Console.Write("معدل: ");
                double gpa = double.Parse(Console.ReadLine());

                // مقداردهی به Struct و ذخیره در آرایه
                students[i] = new Student(studentId, name, major, gpa);
            }

            // نمایش اطلاعات همه دانشجویان
            Console.WriteLine("\nلیست اطلاعات دانشجویان:");
            foreach (Student student in students)
            {
                student.DisplayInfo();
            }

            Console.WriteLine("\nپایان برنامه. موفق باشید!");
        }
    }
}


شرح کد:
ساختار Student:

شامل چهار فیلد برای ذخیره اطلاعات هر دانشجو:
StudentId (شماره دانشجویی)
Name (نام دانشجو)
Major (رشته تحصیلی)
GPA (معدل)
یک سازنده تعریف شده است که مقداردهی اولیه فیلدها را آسان می‌کند.
متد DisplayInfo اطلاعات دانشجو را به صورت قالب‌بندی‌شده نمایش می‌دهد.


کلاس Program:

از کاربر تعداد دانشجویان را دریافت می‌کند.
برای ذخیره اطلاعات، یک آرایه از Struct Student ایجاد می‌کند.
با استفاده از یک حلقه، اطلاعات هر دانشجو را از کاربر دریافت کرده و آن را در Struct ذخیره می‌کند.
در انتها اطلاعات تمامی دانشجویان را نمایش می‌دهد.


اجرای برنامه:
ورودی:

به سیستم مدیریت دانشجویان خوش آمدید!
تعداد دانشجویانی که می‌خواهید وارد کنید: 2

دانشجوی شماره 1:
شماره دانشجویی: 101
نام: علی احمدی
رشته تحصیلی: کامپیوتر
معدل: 18.5

دانشجوی شماره 2:
شماره دانشجویی: 102
نام: مریم محمدی
رشته تحصیلی: برق
معدل: 17.2


خروجی:

لیست اطلاعات دانشجویان:
شماره دانشجویی: 101, نام: علی احمدی, رشته: کامپیوتر, معدل: 18.50
شماره دانشجویی: 102, نام: مریم محمدی, رشته: برق, معدل: 17.20

پایان برنامه. موفق باشید!


بهبودهای پیشنهادی:

  • اعتبارسنجی ورودی‌ها: بررسی کنید که ورودی‌ها صحیح و معتبر باشند.
  • امکان جستجوی دانشجو: قابلیت جستجو بر اساس شماره دانشجویی را اضافه کنید.
  • ذخیره و بازیابی اطلاعات: اطلاعات دانشجویان را در فایل ذخیره کرده و در اجراهای بعدی برنامه بازیابی کنید.
  • این پروژه ساده اما کاربردی، اصول استفاده از ساختار (Struct) در یک برنامه واقعی را نشان می‌دهد و قابل گسترش برای نیازهای پیچیده‌تر است.

 

 

 

 

 

دوره های مرتبط
آموزش برنامه نویسی سی شارپ,آموزش پروژه محور سی شارپ,آموزش مقدماتی تا پیشرفته سی شارپ,طراحی نرم افزار تحت ویندوز

آموزش برنامه نویسی سی شارپ

زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.

999,000 تومان

2k بازدید
مشاهده

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.