با توجه به رشد سریع فناوریها و تکامل زبانهای برنامهنویسی، سی شارپ نیز با ارائه ویژگیهای جدید در نسخههای اخیر خود، سعی دارد همگام با این تغییرات پیش برود. یکی از این ویژگیهای مفید و مهم در سی شارپ، init است. در این مقاله، به بررسی ساده و جامع این ویژگی جدید میپردازیم و کاربردهای آن را در پروژههای مختلف توضیح میدهیم.
init چیست؟
init یکی از ویژگیهای جدید سی شارپ است که در نسخه ۹ معرفی شد. این ویژگی به شما اجازه میدهد تا ویژگیها (properties) را فقط در زمان مقداردهی اولیه تغییر دهید. یعنی بعد از مقداردهی اولیه، دیگر امکان تغییر مقدار آن ویژگی وجود ندارد. این ویژگی به ایجاد اشیاء غیرقابل تغییر یا immutable کمک میکند که میتواند به افزایش امنیت و ثبات کد کمک شایانی کند.
چگونه از init استفاده کنیم؟
برای درک بهتر نحوه استفاده از init، به مثال زیر توجه کنید:
public class Person
{
public string Name { get; init; }
public int Age { get; init; }
}
var person = new Person { Name = "Ali", Age = 30 };
// تغییر مقدار بعد از مقداردهی اولیه مجاز نیست:
// person.Name = "Reza"; // خطا: مقداردهی فقط در زمان ایجاد ممکن است.
در این مثال:
ویژگیهای Name و Age با استفاده از init تعریف شدهاند.
میتوانیم این ویژگیها را هنگام ایجاد یک نمونه از کلاس Person مقداردهی کنیم، اما پس از آن امکان تغییر این مقادیر وجود ندارد.
مزایای استفاده از init
ایجاد اشیاء Immutable (غیرقابل تغییر): استفاده از init به شما اجازه میدهد تا اشیائی ایجاد کنید که پس از مقداردهی اولیه، دیگر قابل تغییر نباشند. این امر در برنامههای چند نخی (multithreading) یا سیستمهای موازی بسیار مهم است، چرا که با استفاده از این ویژگی میتوان از مشکلاتی مانند مخاطرات مسابقه (race conditions) جلوگیری کرد.
افزایش امنیت: در پروژههایی که دادهها باید در برابر تغییرات ناخواسته یا ناپسند محافظت شوند، init به کمک میآید. به عنوان مثال، در سیستمهای مالی یا بانکی که اطلاعات حساس باید پس از تنظیم اولیه تغییر نکند، استفاده از init یک راهحل بسیار مناسب است.
کد خواناتر و سادهتر: با استفاده از init میتوانید کدی بنویسید که به طور پیشفرض فرض بر این باشد که مقادیر پس از مقداردهی اولیه تغییر نخواهند کرد. این امر میتواند به بهبود درک کد توسط سایر برنامهنویسان کمک کند و از ایجاد اشتباهات ناخواسته جلوگیری کند.
مثالهای کاربردی از استفاده از init
مثال 1: ایجاد یک کلاس غیرقابل تغییر (Immutable Class)
در پروژههای واقعی، گاهی نیاز است اشیائی داشته باشیم که پس از مقداردهی اولیه تغییر نکنند. برای مثال، یک شیء Order که شامل اطلاعات سفارشات است:
public class Order
{
public int OrderId { get; init; }
public string ProductName { get; init; }
public int Quantity { get; init; }
}
var order = new Order { OrderId = 1001, ProductName = "Laptop", Quantity = 2 };
// order.Quantity = 5; // خطا: امکان تغییر مقدار وجود ندارد.
در این مثال، پس از مقداردهی اولیه، دیگر نمیتوانیم مقادیر ویژگیهای OrderId، ProductName و Quantity را تغییر دهیم.
مثال 2: حفاظت از اطلاعات حساس
فرض کنید شما یک کلاس دارید که اطلاعات حساس کاربران را مدیریت میکند. میخواهید مطمئن شوید که پس از مقداردهی اولیه، اطلاعات به هیچ عنوان تغییر نمیکند:
public class UserProfile
{
public string Username { get; init; }
public string Email { get; init; }
}
var user = new UserProfile { Username = "johndoe", Email = "john@example.com" };
// user.Email = "john_new@example.com"; // خطا: امکان تغییر مقدار وجود ندارد.
در این مثال، اطلاعات کاربر پس از تنظیم اولیه دیگر قابل تغییر نخواهد بود که به افزایش امنیت کمک میکند.
تفاوت init با set
در سی شارپ، ویژگیهای کلاس معمولاً با get و set تعریف میشوند. اما تفاوت اصلی init با set در این است که init اجازه میدهد که مقداردهی فقط در زمان ایجاد شیء انجام شود و پس از آن دیگر قابل تغییر نباشد، در حالی که set به شما اجازه میدهد در هر زمانی مقدار ویژگی را تغییر دهید.
public class Car
{
public string Model { get; init; } // فقط در زمان ایجاد قابل مقداردهی است
public int Year { get; set; } // در هر زمانی قابل تغییر است
}
var car = new Car { Model = "BMW", Year = 2021 };
car.Year = 2022; // این مجاز است
// car.Model = "Audi"; // خطا: تغییر بعد از مقداردهی اولیه ممکن نیست.
تفاوت init و readonly
در سی شارپ، از readonly نیز برای جلوگیری از تغییر مقادیر استفاده میشود، اما تفاوتهای مهمی بین این دو وجود دارد:
readonly فقط برای فیلدها (fields) استفاده میشود و مقدار آنها فقط در زمان تعریف یا در سازنده کلاس قابل تنظیم است.
init برای ویژگیها (properties) استفاده میشود و اجازه مقداردهی اولیه در زمان ایجاد شیء با سینتکس شیءنگاری (object initializer) را میدهد.
نتیجهگیری
استفاده از init در سی شارپ یک راهکار قدرتمند برای ایجاد اشیاء غیرقابل تغییر (immutable) است. این ویژگی به بهبود ثبات کد، افزایش امنیت و کاهش مخاطرات در برنامههای چند نخی کمک میکند. با بهرهگیری از این قابلیت جدید، میتوانید پروژههای خود را امنتر و کارآمدتر کنید.
اگر قصد دارید به صورت حرفهایتری با زبان سی شارپ و قابلیتهای آن آشنا شوید، پیشنهاد میکنیم در دورههای آموزشی پیشرفته شرکت کنید و مهارتهای برنامهنویسی خود را تقویت کنید.
در آموزشهای باگتو میتوانید نه تنها با ویژگیهای پایهای سی شارپ آشنا شوید، بلکه به تسلط کامل بر این زبان برسید. اگر واقعاً میخواهید در برنامهنویسی سی شارپ موفق شوید، شرکت در دورههای آموزش سی شارپ باگتو را از دست ندهید!
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید