ویژگیهای جدید C# 2.0
نسخه C# 2.0 که در نوامبر 2005 و همراه با Visual Studio 2005 منتشر شد، نقطه عطفی در تاریخچه این زبان محسوب میشود. این نسخه مجموعهای از قابلیتهای جدید را معرفی کرد که باعث بهبود قابلیت خوانایی، انعطافپذیری و نوعپذیری زبان شد. در ادامه به بررسی ویژگیهای کلیدی این نسخه میپردازیم:
1. Generics (کلیات)
یکی از مهمترین ویژگیهای اضافهشده در نسخه 2.0، Generics بود. Generics به توسعهدهندگان این امکان را میدهد که کلاسها، متدها و واسطهایی بنویسند که روی هر نوع دادهای عمل کنند، بدون اینکه ایمنی نوع (Type Safety) از بین برود.
چرا Generics مهم است؟
قبل از Generics، برای ایجاد لیستی از یک نوع خاص، از کلاسهای عمومی مانند ArrayList استفاده میشد. این رویکرد نیاز به تبدیل (Casting) مکرر داشت و باعث بروز خطاهای زمان اجرا میشد.
مثال: استفاده از Generics
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// بدون Generics
System.Collections.ArrayList list = new System.Collections.ArrayList();
list.Add(10);
list.Add("Hello"); // این باعث خطا نمیشود
// با Generics
List numbers = new List();
numbers.Add(10);
// numbers.Add("Hello"); // این باعث خطای کامپایل میشود
foreach (int number in numbers)
{
Console.WriteLine(number);
}
}
}
مزایا:
- جلوگیری از خطاهای زمان اجرا با اطمینان از نوع داده.
- افزایش خوانایی کد.
- بهبود عملکرد به دلیل عدم نیاز به تبدیل نوع.
2. Partial Types (کلاسهای جزئی)
این قابلیت به شما اجازه میدهد که تعریف یک کلاس را در چندین فایل جداگانه تقسیم کنید. این ویژگی بهویژه در پروژههای بزرگ و زمانی که کد بهصورت خودکار تولید میشود، مفید است.
مثال: Partial Types
// File1.cs
public partial class MyClass
{
public void Method1()
{
Console.WriteLine("Method1");
}
}
// File2.cs
public partial class MyClass
{
public void Method2()
{
Console.WriteLine("Method2");
}
}
// Main Program
class Program
{
static void Main()
{
MyClass obj = new MyClass();
obj.Method1();
obj.Method2();
}
}
3. Anonymous Methods (متدهای بینام)
متدهای بینام به شما اجازه میدهند که یک بلوک کد را بدون نیاز به تعریف یک متد جداگانه، درجا به یک Delegate اختصاص دهید.
مثال: Anonymous Methods
using System;
delegate void Print(string message);
class Program
{
static void Main()
{
Print print = delegate (string message)
{
Console.WriteLine(message);
};
print("Hello from Anonymous Method!");
}
}
مزایا:
- کاهش کدهای اضافی.
- مناسب برای کدهایی که فقط یکبار استفاده میشوند.
4. Nullable Value Types (نوعهای مقدار Nullable)
در این نسخه، میتوانید نوعهای مقداری مانند int، bool و float را بهصورت nullable تعریف کنید. این قابلیت زمانی مفید است که نیاز دارید متغیری مقدار “خالی” (null) داشته باشد.
مثال: Nullable Value Types
using System;
class Program
{
static void Main()
{
int? number = null;
if (number.HasValue)
{
Console.WriteLine($"Number: {number.Value}");
}
else
{
Console.WriteLine("Number is null");
}
}
}
مزایا:
- پشتیبانی از حالت “نداشتن مقدار” برای نوعهای مقداری.
- کاهش نیاز به مقادیر پیشفرض غیرمنطقی.
5. Iterators (تکرارگرها)
تکرارگرها به شما اجازه میدهند که از متدهای ویژهای مانند yield return استفاده کنید تا آیتمها را در یک مجموعه تکرار کنید. این قابلیت در حلقههای foreach بسیار مفید است.
مثال: Iterators
using System;
using System.Collections;
class Program
{
static void Main()
{
foreach (int number in GetNumbers())
{
Console.WriteLine(number);
}
}
static IEnumerable GetNumbers()
{
yield return 1;
yield return 2;
yield return 3;
}
}
مزایا:
- سادهسازی فرآیند تکرار.
- افزایش خوانایی کد.
6. Covariance and Contravariance (همریختی و ناهمریختی)
این مفاهیم به شما اجازه میدهند که نوعهای مشتقشده را در اینترفیسها یا Delegates استفاده کنید. این ویژگی به Generics انعطافپذیری بیشتری میدهد.
مثال: Covariance و Contravariance
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
IEnumerable strings = new List { "Hello", "World" };
IEnumerable
7. سایر ویژگیها
Getter/Setter Separate Accessibility (دسترسی جداگانه برای Getter و Setter)
به شما اجازه میدهد که سطح دسترسی متفاوتی برای getter و setter یک property تعریف کنید.
public class MyClass
{
public int MyProperty { get; private set; }
}
Static Classes (کلاسهای ایستا)
کلاسهایی که فقط شامل اعضای ایستا (static) هستند.
public static class Utility
{
public static void Print(string message)
{
Console.WriteLine(message);
}
}
Delegate Inference (استنتاج Delegate)
اجازه میدهد که یک متد را مستقیماً به یک Delegate اختصاص دهید.
Action print = Console.WriteLine;
print("Hello, Delegate Inference!");
جمعبندی
نسخه C# 2.0 با معرفی Generics، Anonymous Methods، Iterators و سایر ویژگیهای جدید، زبان را قدرتمندتر و انعطافپذیرتر کرد. این تغییرات به توسعهدهندگان کمک کرد تا کدی خواناتر و ایمنتر بنویسند.
And To Do So From Now Until The Death, Whatever the Cost
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام