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

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

نسخه C# 3.0 که در نوامبر 2007 و همراه با Visual Studio 2008 منتشر شد، نقطه عطفی در تکامل این زبان به‌شمار می‌آید. این نسخه، با اضافه کردن قابلیت‌هایی که پایه و اساس LINQ را تشکیل می‌دادند، سی‌شارپ را به زبانی قدرتمند و ترکیبی از برنامه‌نویسی شیءگرا و تابعی تبدیل کرد. این ویژگی‌ها باعث ساده‌تر شدن کار با داده‌ها و افزایش خوانایی و کارایی کد شدند. در ادامه، ویژگی‌های کلیدی این نسخه بررسی می‌شوند:

Language-Integrated Query (LINQ) (پرس‌وجوی یکپارچه با زبان)

ویژگی شاخص نسخه 3.0، LINQ بود که امکان نوشتن پرس‌وجوهای SQLمانند برای کار با داده‌ها در حافظه، دیتابیس‌ها و فایل‌های XML را فراهم کرد. LINQ خوانایی و انعطاف‌پذیری کد را به شکل قابل‌توجهی بهبود بخشید.

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

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int[] numbers = { 1, 2, 3, 4, 5 };

        // استفاده از LINQ برای فیلتر کردن اعداد
        var evenNumbers = numbers.Where(n => n % 2 == 0);

        foreach (var number in evenNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

مزایا:

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

Lambda Expressions (عبارات لامبدا)

عبارات لامبدا جایگزین متدهای بی‌نام شدند و نوشتن کدهای کوتاه‌تر و تمیزتر برای تعریف Delegates و عبارت‌های LINQ را امکان‌پذیر کردند.

مثال: Lambda Expressions

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List numbers = new List { 1, 2, 3, 4, 5 };

        // استفاده از عبارات لامبدا
        var squares = numbers.Select(n => n * n);

        foreach (var square in squares)
        {
            Console.WriteLine(square);
        }
    }
}

Auto-Implemented Properties (خصوصیات خودکار پیاده‌سازی‌شده)

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

مثال: Auto-Implemented Properties

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List numbers = new List { 1, 2, 3, 4, 5 };

        // استفاده از عبارات لامبدا
        var squares = numbers.Select(n => n * n);

        foreach (var square in squares)
        {
            Console.WriteLine(square);
        }
    }
}

Anonymous Types (نوع‌های بی‌نام)

با استفاده از نوع‌های بی‌نام، می‌توانید اشیایی بسازید که نیازی به تعریف کلاس ندارند. این قابلیت به‌ویژه در پرس‌وجوهای LINQ مفید است.

مثال: Anonymous Types

var person = new { Name = "Bob", Age = 25 };
Console.WriteLine($"{person.Name}, {person.Age} years old");

Extension Methods (متدهای گسترشی)

متدهای گسترشی اجازه می‌دهند متدهایی را به کلاس‌های موجود اضافه کنید، بدون این‌که نیاز به ارث‌بری یا تغییر در کد اصلی باشد. این قابلیت، یکی از پایه‌های LINQ است.

مثال: Extension Methods

public static class StringExtensions
{
    public static bool IsLongerThan(this string str, int length)
    {
        return str.Length > length;
    }
}

class Program
{
    static void Main()
    {
        string message = "Hello, World!";
        Console.WriteLine(message.IsLongerThan(5)); // خروجی: True
    }
}

Object and Collection Initializers (مقداردهی اولیه اشیا و مجموعه‌ها)

این ویژگی‌ها به شما اجازه می‌دهند که اشیا و مجموعه‌ها را هنگام ایجاد، به‌طور همزمان مقداردهی کنید.

مثال: Object Initializers

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

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "Charlie", Age = 40 };
        Console.WriteLine($"{person.Name}, {person.Age} years old");
    }
}

مثال: Collection Initializers

using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var numbers = new List { 1, 2, 3, 4, 5 };
        foreach (var number in numbers)
        {
            Console.WriteLine(number);
        }
    }
}

Implicitly Typed Local Variables (متغیرهای محلی با نوع ضمنی)

کلمه کلیدی var اجازه می‌دهد نوع متغیر به‌طور خودکار توسط کامپایلر تشخیص داده شود. این ویژگی به خوانایی کد کمک می‌کند.

مثال: Implicitly Typed Variables

var name = "Eve";
var age = 28;

Console.WriteLine($"{name}, {age} years old");

Expression Trees (درخت‌های عبارت)

این قابلیت امکان تجزیه و تحلیل و تغییر عبارات لامبدا را در زمان اجرا فراهم می‌کند. این ویژگی در تکنولوژی‌هایی مانند Entity Framework کاربرد دارد.

مثال: Expression Trees

using System;
using System.Linq.Expressions;

class Program
{
    static void Main()
    {
        Expression> square = x => x * x;
        Console.WriteLine(square); // خروجی: x => (x * x)
    }
}

Partial Methods (متدهای جزئی)

متدهای جزئی به توسعه‌دهندگان اجازه می‌دهند متدهایی تعریف کنند که ممکن است پیاده‌سازی نشوند. این ویژگی معمولاً در کلاس‌های تولیدشده به‌صورت خودکار استفاده می‌شود.

مثال: Partial Methods

partial class MyClass
{
    partial void OnSomethingHappened();
    public void DoSomething()
    {
        OnSomethingHappened?.Invoke();
    }
}

partial class MyClass
{
    partial void OnSomethingHappened()
    {
        Console.WriteLine("Something happened!");
    }
}

جمع‌بندی

نسخه C# 3.0 با معرفی قابلیت‌هایی مانند LINQ، Lambda Expressions، و Extension Methods زبان سی‌شارپ را به ابزاری قدرتمندتر و کارآمدتر برای توسعه‌دهندگان تبدیل کرد. این ویژگی‌ها با ایجاد ترکیبی از برنامه‌نویسی شیءگرا و تابعی، امکان نوشتن کدهای خواناتر و موثرتر را فراهم کردند.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
ویژگی‌های جدید 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 قبل…

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

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

آنچه در این پست میخوانید C# 1.0: اولین گام‌ها ویژگی‌های اصلی C# 1.0 1. کلاس‌ها (Classes) 2. ساختارها (Structs) 3….

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

نظرات

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

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