Init در سی شارپ
Init در سیشارپ امکان مقداردهی ویژگیها را فقط هنگام ایجاد شیء فراهم میکند و امنیت، خوانایی و پایداری کد را افزایش می دهد.
Init در سیشارپ
با معرفی نسخههای جدید زبان سیشارپ، قابلیتهای متعددی برای افزایش امنیت، خوانایی و نگهداری بهتر کدها اضافه شدهاند.
یکی از ویژگیهای مهمی که از C# 9.0 معرفی شد، قابلیت Init Accessor یا همان init است.
این قابلیت به توسعهدهندگان اجازه میدهد ویژگیهای یک شیء را تنها هنگام ایجاد مقداردهی کنند و پس از آن از تغییر ناخواسته مقادیر جلوگیری نمایند.
در پروژههای بزرگ و سازمانی، کنترل تغییرات دادهها اهمیت بسیار زیادی دارد.
به همین دلیل استفاده از Init در سیشارپ به یکی از روشهای محبوب برای پیادهسازی اشیای Immutable یا تغییرناپذیر تبدیل شده است.
Init در سیشارپ چیست؟
کلمه کلیدی init نوعی Accessor برای Propertyها در سیشارپ است که عملکردی مشابه setter دارد، اما تنها در زمان مقداردهی اولیه شیء قابل استفاده است.
قبل از معرفی init، اگر میخواستیم یک ویژگی فقط در زمان ساخت شیء مقدار بگیرد معمولاً از سازنده (Constructor) یا ویژگیهای فقط خواندنی استفاده میکردیم.
اما اکنون با init این کار بسیار سادهتر شده است.
مثال:
public class Employee
{
public string Name { get; init; }
public int Age { get; init; }
}
استفاده:
Employee emp = new Employee
{
Name = "Ali",
Age = 30
};
پس از ایجاد شیء:
emp.Name = "Reza";
خطای کامپایل ایجاد خواهد شد.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
تفاوت init و set در سیشارپ
بسیاری از برنامهنویسان تازهکار تفاوت بین set و init را نمیدانند.
استفاده از set
public string Name { get; set; }
در این حالت:
employee.Name = "Ali";
employee.Name = "Reza";
employee.Name = "Mohammad";
مقدار Property در هر زمان قابل تغییر است.
استفاده از init در سی شارپ
public string Name { get; init; }
در این حالت Property فقط هنگام ساخت شیء مقدار میگیرد.
چرا از Init Accessor استفاده کنیم؟
استفاده از Init مزایای متعددی دارد:
-
افزایش امنیت دادهها
جلوگیری از تغییر ناخواسته اطلاعات مهم. -
کاهش خطاهای برنامه
وقتی دادهها پس از ایجاد شیء تغییر نکنند، احتمال بروز Bug کاهش پیدا میکند. -
خوانایی بهتر کد
برنامهنویسان متوجه میشوند که این Property فقط یک بار مقداردهی میشود. -
مناسب برای معماریهای مدرن
بهویژه در:
-
- Domain Driven Design (DDD)
- Clean Architecture
- Microservices
- CQRS

نحوه عملکرد Init در #C
فرض کنید اطلاعات یک مشتری نباید پس از ثبت تغییر کند.
public class Customer
{
public int Id { get; init; }
public string FullName { get; init; }
}
ایجاد شیء:
Customer customer = new Customer
{
Id = 1,
FullName = "Ali Ahmadi"
};
تلاش برای تغییر:
customer.Id = 5;
خروجی:
Compilation Error
مثال کاربردی فروشگاه اینترنتی در سی شارپ
در یک فروشگاه اینترنتی شناسه سفارش نباید تغییر کند.
public class Order
{
public int OrderId { get; init; }
public DateTime OrderDate { get; init; }
}
استفاده:
Order order = new Order
{
OrderId = 1001,
OrderDate = DateTime.Now
};
بعد از ثبت سفارش:
order.OrderId = 5000;
غیرمجاز خواهد بود.
این موضوع از دستکاری اطلاعات حساس جلوگیری میکند.
استفاده از Init با Record در سی شارپ
یکی از مهمترین کاربردهای Init در Recordها است.
public record Product
{
public string Name { get; init; }
public decimal Price { get; init; }
}
ایجاد نمونه:
var product = new Product
{
Name = "Laptop",
Price = 35000
};
Recordها معمولاً برای اشیای Immutable طراحی شدهاند و init کاملاً با آنها سازگار است.
ترکیب Constructor و Init در سی شارپ
میتوان Constructor و Init را همزمان استفاده کرد.
public class User
{
public string Username { get; init; }
public User(string username)
{
Username = username;
}
}
استفاده:
User user = new User("admin");
مثال پروژهای سیستم بانکی در سی شارپ
در سیستمهای بانکی شماره حساب نباید تغییر کند.
public class BankAccount
{
public string AccountNumber { get; init; }
public decimal Balance { get; set; }
}
نمونه:
BankAccount account = new BankAccount
{
AccountNumber = "12345678",
Balance = 10000
};
تغییر موجودی:
account.Balance += 5000;
مجاز است.
اما:
account.AccountNumber = "99999999";
مجاز نیست.
مثال پروژهای منابع انسانی در سی شارپ
public class Employee
{
public int EmployeeId { get; init; }
public string Name { get; set; }
public decimal Salary { get; set; }
}
اینجا:
شناسه کارمند ثابت است.
نام و حقوق قابل تغییر هستند.
این یکی از رایجترین سناریوهای تجاری است.
مزایای استفاده از Init در پروژههای بزرگ
در نرمافزارهای Enterprise معمولاً برخی اطلاعات نباید تغییر کنند:
- کد ملی
- شماره حساب
- شماره سفارش
- شناسه مشتری
- شناسه فاکتور
- تاریخ ثبت
استفاده از Init باعث میشود این محدودیتها در سطح کامپایلر اعمال شوند.
Init و Immutable Objects در سی شارپ
Immutable Object به شیئی گفته میشود که پس از ایجاد قابل تغییر نباشد.
مثال:
public class Book
{
public string Title { get; init; }
public string Author { get; init; }
}
نمونه:
Book book = new Book
{
Title = "C# Programming",
Author = "John Smith"
};
بعد از ایجاد شیء هیچ Property قابل تغییر نیست.
بهترین زمان استفاده از Init در سی شارپ
از Init استفاده کنید زمانی که:
✅ داده نباید تغییر کند.
✅ شناسههای اصلی دارید.
✅ اطلاعات امنیتی دارید.
✅ از Record استفاده میکنید.
✅ معماری Immutable دارید.
چه زمانی از Set استفاده کنیم؟
اگر داده قرار است تغییر کند بهتر است از Set استفاده شود.
مثال:
public class Product
{
public decimal Price { get; set; }
}
قیمت محصول ممکن است تغییر کند.
بنابراین استفاده از set منطقیتر است.
اشتباهات رایج هنگام استفاده از Init
اشتباه اول
تصور اینکه init کاملاً readonly است.
در حالی که فقط بعد از ایجاد شیء readonly میشود.
اشتباه دوم
استفاده بیش از حد از init
همه Propertyها نباید init باشند.
مثال:
public decimal Balance { get; set; }
موجودی حساب معمولاً تغییر میکند.
اشتباه سوم
ترکیب نادرست با منطق تجاری
گاهی برخی دادهها نیازمند اعتبارسنجی هنگام تغییر هستند و نباید صرفاً با init محدود شوند.
سوالات متداول درباره Init در سیشارپ
آیا Init جایگزین Set شده است؟
خیر. هر دو کاربرد متفاوتی دارند.
Init از چه نسخهای اضافه شد؟
از C# 9.0 و .NET 5.
آیا Init باعث افزایش امنیت میشود؟
بله، زیرا از تغییر ناخواسته اطلاعات جلوگیری میکند.
آیا میتوان Init و Constructor را با هم استفاده کرد؟
بله.
آیا Init در Recordها کاربرد دارد؟
بله، یکی از مهمترین کاربردهای آن در Recordها است.
جمعبندی
Init در سیشارپ (C# Init Accessor) یکی از ویژگیهای مدرن و کاربردی زبان #C است که امکان مقداردهی اولیه Propertyها را فراهم میکند و پس از ایجاد شیء مانع تغییر آنها میشود.
این قابلیت نقش مهمی در پیادهسازی اشیای Immutable، افزایش امنیت دادهها، کاهش خطاهای برنامهنویسی و بهبود معماری نرمافزار دارد.
در پروژههای تجاری مانند سیستمهای بانکی، فروشگاههای اینترنتی، نرمافزارهای حسابداری، ERP و سامانههای سازمانی، استفاده از Init میتواند از تغییر اطلاعات حساس جلوگیری کند و کیفیت کد را به شکل چشمگیری افزایش دهد.
به همین دلیل یادگیری و استفاده صحیح از Init Accessor در #C برای هر برنامهنویس حرفهای سیشارپ ضروری است.


کاربران ما
شما هم نظرتون با ما دریاره “Init در سی شارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید