ویژگی‌های جدید C# 1.0

ویژگی‌های جدید C# 1.0

زبان برنامه‌نویسی C# یکی از پرکاربردترین زبان‌های دنیای برنامه‌نویسی است که توسط مایکروسافت توسعه یافته است. اولین نسخه آن، C# 1.0، در ژانویه 2002 با Visual Studio .NET 2002 منتشر شد. این نسخه نقطه آغاز زبانی بود که امروزه در دنیای توسعه نرم‌افزار، جایگاه ویژه‌ای دارد.

C# 1.0: اولین گام‌ها

زمانی که به نسخه 1.0 نگاه می‌کنیم، متوجه می‌شویم که C# در آن دوران شباهت زیادی به زبان Java داشت. هدف اصلی مایکروسافت، طراحی زبانی “ساده، مدرن، چندمنظوره و شی‌گرا” بود که استانداردهای ECMA را رعایت کند.

در آن زمان، شباهت C# به Java باعث شد که این زبان به‌عنوان جایگزینی قوی برای Java در پلتفرم ویندوز مطرح شود. اما ویژگی‌هایی که امروزه برای ما در C# بدیهی هستند، مانند async/await یا Generics، در نسخه 1.0 وجود نداشتند. همچنین، امکاناتی مانند LINQ که امروز بخشی جدایی‌ناپذیر از این زبان است، هنوز معرفی نشده بودند.

با این وجود، C# 1.0 پایه‌گذار ساختاری بود که در سال‌های بعد با افزودن ویژگی‌های مدرن‌تر تکامل یافت.

ویژگی‌های اصلی C# 1.0

در ادامه، نگاهی به ویژگی‌های کلیدی C# 1.0 می‌اندازیم:

1. کلاس‌ها (Classes)

کلاس‌ها قلب برنامه‌نویسی شی‌گرا هستند. در C# 1.0، امکان تعریف کلاس‌ها وجود داشت که شامل ویژگی‌ها، متدها و سازنده‌ها بود. کلاس‌ها ابزار اصلی برای ساخت برنامه‌های ماژولار و قابل توسعه بودند.

2. ساختارها (Structs)

ساختارها یا Structs برای تعریف داده‌های سبک وزن که نیاز به ویژگی‌های پیشرفته کلاس‌ها ندارند، معرفی شدند. Structها در حافظه استک ذخیره می‌شوند و عملکرد بهتری در موقعیت‌های خاص داشتند.

3. رابط‌ها (Interfaces)

رابط‌ها امکان تعریف قراردادهایی را برای پیاده‌سازی در کلاس‌ها فراهم کردند. این ویژگی امکان پیاده‌سازی چندگانه را فراهم می‌کرد و برنامه‌نویسان می‌توانستند به سادگی وابستگی‌ها را مدیریت کنند.

4. رخدادها (Events)

در C# 1.0، رخدادها به‌عنوان مکانیزمی برای پیاده‌سازی الگوی Observer معرفی شدند. این ویژگی به تعامل بین اجزا کمک کرد و امکان تعریف سیستم‌های واکنش‌گرا را فراهم کرد.

5. ویژگی‌ها (Properties)

ویژگی‌ها (Properties) ابزاری بودند که به برنامه‌نویسان امکان می‌دادند دسترسی به داده‌های یک کلاس را کنترل کنند. آن‌ها ترکیبی از متدهای getter و setter بودند که به‌شکل ساده‌تر و خواناتر تعریف می‌شدند.

6. نمایندگان (Delegates)

Delegates یا نمایندگان ابزار قدرتمندی برای مدیریت اشاره‌گرهای متدی فراهم کردند. این ویژگی پایه‌ای برای پیاده‌سازی رخدادها و برنامه‌نویسی بر اساس الگوی Callback بود.

7. عملگرها و عبارات (Operators and Expressions)

عملگرهای استاندارد ریاضی، منطقی و مقایسه‌ای در C# 1.0 وجود داشتند. این عملگرها به برنامه‌نویسان امکان می‌دادند محاسبات و منطق‌های پیچیده را با کدهای خوانا پیاده‌سازی کنند.

8. دستورات (Statements)

زبان C# با دستورات کنترلی مانند if، else، switch، while، for و foreach امکان ساختاردهی جریان کنترل را فراهم کرد.

9. ویژگی‌ها (Attributes)

Attributes در C# 1.0 به‌عنوان ابزاری برای متاداده معرفی شدند. با استفاده از این ویژگی، برنامه‌نویسان می‌توانستند اطلاعاتی درباره کلاس‌ها، متدها یا سایر المان‌ها اضافه کنند که در زمان اجرا یا کامپایل استفاده شوند.

C# 1.0 با وجود سادگی و شباهتش به زبان Java، بسیاری از قابلیت‌های پایه‌ای برنامه‌نویسی شی‌گرا و ساختاریافته را در خود جای داده بود. در ادامه، به بررسی کامل ویژگی‌های اصلی این نسخه می‌پردازیم.

1. کلاس‌ها (Classes)

کلاس‌ها یکی از مفاهیم اساسی در برنامه‌نویسی شی‌گرا هستند. در C#، کلاس‌ها به‌عنوان ساختارهایی تعریف می‌شوند که داده‌ها (ویژگی‌ها) و رفتارها (متدها) را در کنار هم قرار می‌دهند. از کلاس‌ها برای ایجاد اشیاء استفاده می‌شود.

مثال: تعریف یک کلاس ساده

using System;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    // سازنده
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public void Introduce()
    {
        Console.WriteLine($"Hello, my name is {Name} and I am {Age} years old.");
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person("John", 30);
        person.Introduce(); // خروجی: Hello, my name is John and I am 30 years old.
    }
}

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

2. ساختارها (Structs)

ساختارها مشابه کلاس‌ها هستند، اما به‌جای استفاده از حافظه Heap، از حافظه Stack استفاده می‌کنند. این موضوع باعث می‌شود ساختارها سبک‌تر و سریع‌تر باشند، اما محدودیت‌هایی مانند عدم پشتیبانی از ارث‌بری دارند.

مثال: تعریف یک ساختار

using System;

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

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

class Program
{
    static void Main()
    {
        Point point = new Point { X = 5, Y = 10 };
        point.PrintPoint(); // خروجی: Point: (5, 10)
    }
}

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

3. اینترفیس‌ها (Interfaces)

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

مثال: استفاده از اینترفیس

using System;

public interface IAnimal
{
    void Speak();
}

public class Dog : IAnimal
{
    public void Speak()
    {
        Console.WriteLine("Woof! Woof!");
    }
}

public class Cat : IAnimal
{
    public void Speak()
    {
        Console.WriteLine("Meow! Meow!");
    }
}

class Program
{
    static void Main()
    {
        IAnimal dog = new Dog();
        IAnimal cat = new Cat();
        dog.Speak(); // خروجی: Woof! Woof!
        cat.Speak(); // خروجی: Meow! Meow!
    }
}

نکته: اینترفیس‌ها به برنامه‌نویسان امکان می‌دهند تا وابستگی‌ها را کم کرده و کدهای خود را انعطاف‌پذیرتر کنند.

4. رویدادها (Events)

رویدادها مکانیزمی برای اطلاع‌رسانی به سایر بخش‌های برنامه در زمان وقوع یک اتفاق خاص هستند. از Delegateها برای مدیریت رویدادها استفاده می‌شود.

مثال: تعریف و استفاده از یک رویداد

using System;

public class Alarm
{
    public event Action OnAlarmTriggered;

    public void TriggerAlarm()
    {
        Console.WriteLine("Alarm triggered!");
        OnAlarmTriggered?.Invoke();
    }
}

class Program
{
    static void Main()
    {
        Alarm alarm = new Alarm();
        alarm.OnAlarmTriggered += () => Console.WriteLine("Alert: Take action!");
        alarm.TriggerAlarm();
        // خروجی:
        // Alarm triggered!
        // Alert: Take action!
    }
}

نکته: رویدادها برای پیاده‌سازی الگوهای طراحی مانند Observer بسیار مفید هستند.

5. خصوصیات (Properties)

خصوصیات راهی برای مدیریت داده‌های داخلی کلاس‌ها هستند. آن‌ها به توسعه‌دهندگان اجازه می‌دهند مقادیر را از بیرون بخوانند یا تغییر دهند، بدون اینکه مستقیماً به متغیرهای داخلی دسترسی پیدا کنند.

مثال: تعریف خصوصیت

public class Rectangle
{
    private int width;
    private int height;

    public int Width
    {
        get { return width; }
        set { width = value > 0 ? value : 1; }
    }

    public int Height
    {
        get { return height; }
        set { height = value > 0 ? value : 1; }
    }
}

نکته: استفاده از Properties باعث افزایش امنیت و کنترل روی داده‌ها می‌شود.

6. Delegate‌ها

Delegate نوعی متغیر است که می‌تواند به متدها اشاره کند. این ویژگی در نسخه 1.0 معرفی شد و برای پیاده‌سازی الگوهای مختلف طراحی، از جمله Callbackها، بسیار کاربردی است.

مثال: استفاده از Delegate

using System;

public delegate void PrintDelegate(string message);

public class Printer
{
    public void PrintMessage(string message)
    {
        Console.WriteLine(message);
    }
}

class Program
{
    static void Main()
    {
        Printer printer = new Printer();
        PrintDelegate del = printer.PrintMessage;
        del("Hello, Delegate!"); // خروجی: Hello, Delegate!
    }
}

7. اپراتورها و عبارات (Operators and Expressions)

C# 1.0 از مجموعه کاملی از اپراتورها پشتیبانی می‌کرد، مانند:

  • ریاضیاتی: +, -, *, /
  • مقایسه‌ای: ==, !=, <, >
  • منطقی: &&, ||

مثال: استفاده از اپراتورها

int a = 10, b = 5;
int sum = a + b; // خروجی: 15
bool isEqual = a == b; // خروجی: false

8. Attributeها

Attributes برای افزودن متاداده به کد استفاده می‌شوند. آن‌ها در زمان اجرا توسط Reflection قابل دسترسی هستند.

مثال: استفاده از Attribute

using System;

[Obsolete("This method is obsolete. Use NewMethod instead.")]
public void OldMethod()
{
    Console.WriteLine("Old method");
}

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
ویژگی‌های جدید C# 3.0

ویژگی‌های جدید C# 3.0

آنچه در این پست میخوانید Language-Integrated Query (LINQ) (پرس‌وجوی یکپارچه با زبان) Lambda Expressions (عبارات لامبدا) Auto-Implemented Properties (خصوصیات خودکار…

بیشتر بخوانید
ویژگی‌های جدید C# 2.0

ویژگی‌های جدید C# 2.0

آنچه در این پست میخوانید ۱. Generics (کلیات) ۲. Partial Types (کلاس‌های جزئی) ۳. Anonymous Methods (متدهای بی‌نام) ۴. Nullable…

بیشتر بخوانید
ویژگی‌های جدید C# 1.2

ویژگی‌های جدید C# 1.2

آنچه در این پست میخوانید حلقه foreach و Dispose چرا Dispose مهم است؟ آنالیز عملکرد foreach در C# 1.2 قبل…

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.