c# advanced: افزایش سوابق افزودن انعطاف پذیری با اعضای اضافی

Summarize this content to 400 words in Persian Lang
رکوردها در سی شارپ وقتی صحبت از تعریف انواع داده محور می شود، بازی را تغییر می دهد. آنها ویژگی های داخلی مانند برابری مبتنی بر ارزش، تغییر ناپذیری، و نحو مختصر را ارائه می دهند. در حالی که سازنده اولیه برای تعریف ویژگیهای ضروری عالی است، ممکن است لازم باشد رکوردها را با ویژگیهای اختیاری، روشها یا مقادیر مشتق شده برای سناریوهای پیچیدهتر گسترش دهید.
در این مقاله، نحوه بهبود رکوردها را با افزودن اعضای اضافی بررسی خواهیم کرد و در مورد سناریوهایی که در آن می درخشند بحث خواهیم کرد. ما مثالهای واضح و تکالیف عملی را برای عمیقتر کردن درک شما درج میکنیم.
چرا یک رکورد را تمدید کنیم؟
این سازنده اولیه در یک رکورد حداقل اطلاعات مورد نیاز برای ایجاد یک نمونه را تعریف می کند. با این حال، مواردی وجود دارد که ممکن است نیاز داشته باشید:
خواص مشتق شده: محاسبه مقادیر بر اساس ویژگی های موجود.
فیلدهای اختیاری: مدیریت داده هایی که همیشه در طول اولیه سازی مورد نیاز نیستند.
روش های سفارشی: عملکردی خاص به هدف رکورد اضافه کنید.
سی شارپ با تعریف بدنهای که میتوانید فیلدها، ویژگیها و متدها را در آن اضافه کنید، اجازه میدهد تا رکوردها انعطافپذیر باشند.
افزودن ویژگی های مشتق شده
خواص مشتق شده زمانی مفید هستند که شما نیاز به محاسبه مقادیر بر اساس ویژگی های دیگر دارید. بیایید a را تعریف کنیم Book ضبط با Title و Author به عنوان فیلدهای مورد نیاز ما همچنین یک ویژگی محاسبه شده اضافه می کنیم، DisplayTitle، که آنها را برای اهداف نمایشی ترکیب می کند.
public record Book(string Title, string Author)
{
// Derived property
public string DisplayTitle => $”{Title} by {Author}”;
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مثال استفاده:
var book = new Book(“The Great Gatsby”, “F. Scott Fitzgerald”);
Console.WriteLine(book.DisplayTitle); // Output: The Great Gatsby by F. Scott Fitzgerald
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
افزودن ویژگی های اختیاری با init
ویژگی های اختیاری همیشه بخشی از سازنده اولیه نیستند. با استفاده از init کلمه کلیدی، شما می توانید ویژگی هایی را تعریف کنید که فقط می توانند در هنگام تنظیم اولیه تنظیم شوند و پس از آن تغییر ناپذیر باقی بمانند.
در اینجا یک مثال با a Car رکورد:
public record Car(string Make, string Model)
{
// Optional immutable property
public int? Year { get; init; }
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مثال استفاده:
var car = new Car(“Tesla”, “Model S”) { Year = 2021 };
Console.WriteLine($”{car.Make} {car.Model}, Year: {car.Year}”);
// Output: Tesla Model S, Year: 2021
// Attempting to modify ‘Year’ after initialization will cause a compiler error:
// car.Year = 2022; // Error
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این init کلمه کلیدی تضمین می کند که ویژگی های اختیاری پس از مقداردهی اولیه تغییر ناپذیر هستند.
استفاده از رکوردهای تودرتو برای داده های پیچیده
رکوردهای تودرتو روشی قدرتمند برای مدیریت داده های پیچیده هستند. بیایید a را تعریف کنیم Customer ضبط با تو در تو Address رکورد:
public record Address(string Street, string City);
public record Customer(string Name)
{
// Optional property with a nested record
public Address? Address { get; init; }
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مثال استفاده:
var customer = new Customer(“Alice”)
{
Address = new Address(“123 Elm Street”, “Springfield”)
};
Console.WriteLine($”{customer.Name} lives at {customer.Address?.Street}, {customer.Address?.City}”);
// Output: Alice lives at 123 Elm Street, Springfield
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
تو در تو Address رکورد به طور یکپارچه ادغام می شود و ساختارهای داده ای تمیز و مختصر را امکان پذیر می کند.
اضافه کردن روش های سفارشی
روشهای سفارشی به شما امکان میدهند عملکرد خاصی را به رکوردها اضافه کنید. برای مثال، بیایید یک متد به a اضافه کنیم Transaction ثبت برای محاسبه هزینه کل:
public record Transaction(string Item, int Quantity, decimal UnitPrice)
{
// Method to calculate the total cost
public decimal CalculateTotal() => Quantity * UnitPrice;
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مثال استفاده:
var transaction = new Transaction(“Laptop”, 2, 1500.00m);
Console.WriteLine(transaction.CalculateTotal()); // Output: 3000.00
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این روش رفتار را مستقیماً در رکورد محصور می کند و منطق را نزدیک به داده ها نگه می دارد.
تغییرناپذیری با with عبارات
در حالی که رکوردها تغییر ناپذیر هستند، می توانید نمونه های جدیدی با ویژگی های اصلاح شده با استفاده از آن ایجاد کنید with بیان این به ویژه زمانی مفید است که می خواهید داده ها را با حفظ شی اصلی به روز کنید.
بیایید تقویت کنیم Customer ضبط با این ویژگی:
var originalCustomer = new Customer(“Alice”)
{
Address = new Address(“123 Elm Street”, “Springfield”)
};
var updatedCustomer = originalCustomer with { Address = new Address(“456 Oak Avenue”, “Shelbyville”) };
Console.WriteLine(originalCustomer.Address?.Street); // Output: 123 Elm Street
Console.WriteLine(updatedCustomer.Address?.Street); // Output: 456 Oak Avenue
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این with بیان تغییر ناپذیری را تضمین می کند و در عین حال امکان انعطاف پذیری را برای به روز رسانی فراهم می کند.
تکالیف برای آزمایش درک شما
سطح آسان
ایجاد یک Movie رکورد با:
Title و Director به عنوان ویژگی های سازنده اولیه
یک ویژگی محاسبه شده Description که هر دو را ترکیب می کند.
خروجی نمونه:
var movie = new Movie(“Inception”, “Christopher Nolan”);
Console.WriteLine(movie.Description); // Output: Inception by Christopher Nolan
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
یک ویژگی اختیاری اضافه کنید Rating با استفاده از init به Movie ثبت کنید.
سطح متوسط
الف را تعریف کنید Product رکورد با:
Name و Price در سازنده اولیه
یک روش ApplyDiscount(decimal percentage) که جدید را برمی گرداند Product با قیمت تخفیف خورده
خروجی نمونه:
var product = new Product(“Laptop”, 2000.00m);
var discountedProduct = product.ApplyDiscount(10);
Console.WriteLine(discountedProduct.Price); // Output: 1800.00
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
یک رکورد تودرتو اضافه کنید Category برای نشان دادن دسته محصول و ادغام آن در Product ثبت کنید.
سطح دشوار
ایجاد کنید Order رکورد:
شامل شود OrderId، ItemName، Quantity، و UnitPrice در سازنده اولیه
یک ویژگی محاسبه شده اضافه کنید TotalPrice که کل را محاسبه می کند.
یک روش اضافه کنید UpdateQuantity(int newQuantity) که جدید را برمی گرداند Order با مقدار به روز شده
خروجی نمونه:
var order = new Order(“ORD001”, “Tablet”, 2, 500.00m);
Console.WriteLine(order.TotalPrice); // Output: 1000.00
var updatedOrder = order.UpdateQuantity(5);
Console.WriteLine(updatedOrder.TotalPrice); // Output: 2500.00
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
زمان استفاده از رکوردها در مقابل کلاس ها
استفاده کنید سوابق برای:
انواع داده محور غیرقابل تغییر
سناریوهایی که نیاز به برابری مبتنی بر ارزش دارند.
تعاریف تمیز و فشرده
استفاده کنید کلاس ها برای:
انواع با رفتار قابل توجه یا حالت تغییرپذیر.
سلسله مراتب و روابط پیچیده
نتیجه گیری
گسترش رکوردها با اعضای اضافی، ویژگی های محاسبه شده و روش ها به شما امکان می دهد مدل های داده همه کاره و قابل نگهداری ایجاد کنید. با استفاده از ویژگی هایی مانند init کلمه کلیدی و with عبارات، شما می توانید تغییر ناپذیری و انعطاف پذیری را متعادل کنید.
رکوردها در سی شارپ وقتی صحبت از تعریف انواع داده محور می شود، بازی را تغییر می دهد. آنها ویژگی های داخلی مانند برابری مبتنی بر ارزش، تغییر ناپذیری، و نحو مختصر را ارائه می دهند. در حالی که سازنده اولیه برای تعریف ویژگیهای ضروری عالی است، ممکن است لازم باشد رکوردها را با ویژگیهای اختیاری، روشها یا مقادیر مشتق شده برای سناریوهای پیچیدهتر گسترش دهید.
در این مقاله، نحوه بهبود رکوردها را با افزودن اعضای اضافی بررسی خواهیم کرد و در مورد سناریوهایی که در آن می درخشند بحث خواهیم کرد. ما مثالهای واضح و تکالیف عملی را برای عمیقتر کردن درک شما درج میکنیم.
چرا یک رکورد را تمدید کنیم؟
این سازنده اولیه در یک رکورد حداقل اطلاعات مورد نیاز برای ایجاد یک نمونه را تعریف می کند. با این حال، مواردی وجود دارد که ممکن است نیاز داشته باشید:
- خواص مشتق شده: محاسبه مقادیر بر اساس ویژگی های موجود.
- فیلدهای اختیاری: مدیریت داده هایی که همیشه در طول اولیه سازی مورد نیاز نیستند.
- روش های سفارشی: عملکردی خاص به هدف رکورد اضافه کنید.
سی شارپ با تعریف بدنهای که میتوانید فیلدها، ویژگیها و متدها را در آن اضافه کنید، اجازه میدهد تا رکوردها انعطافپذیر باشند.
افزودن ویژگی های مشتق شده
خواص مشتق شده زمانی مفید هستند که شما نیاز به محاسبه مقادیر بر اساس ویژگی های دیگر دارید. بیایید a را تعریف کنیم Book
ضبط با Title
و Author
به عنوان فیلدهای مورد نیاز ما همچنین یک ویژگی محاسبه شده اضافه می کنیم، DisplayTitle
، که آنها را برای اهداف نمایشی ترکیب می کند.
public record Book(string Title, string Author)
{
// Derived property
public string DisplayTitle => $"{Title} by {Author}";
}
مثال استفاده:
var book = new Book("The Great Gatsby", "F. Scott Fitzgerald");
Console.WriteLine(book.DisplayTitle); // Output: The Great Gatsby by F. Scott Fitzgerald
افزودن ویژگی های اختیاری با init
ویژگی های اختیاری همیشه بخشی از سازنده اولیه نیستند. با استفاده از init
کلمه کلیدی، شما می توانید ویژگی هایی را تعریف کنید که فقط می توانند در هنگام تنظیم اولیه تنظیم شوند و پس از آن تغییر ناپذیر باقی بمانند.
در اینجا یک مثال با a Car
رکورد:
public record Car(string Make, string Model)
{
// Optional immutable property
public int? Year { get; init; }
}
مثال استفاده:
var car = new Car("Tesla", "Model S") { Year = 2021 };
Console.WriteLine($"{car.Make} {car.Model}, Year: {car.Year}");
// Output: Tesla Model S, Year: 2021
// Attempting to modify 'Year' after initialization will cause a compiler error:
// car.Year = 2022; // Error
این init
کلمه کلیدی تضمین می کند که ویژگی های اختیاری پس از مقداردهی اولیه تغییر ناپذیر هستند.
استفاده از رکوردهای تودرتو برای داده های پیچیده
رکوردهای تودرتو روشی قدرتمند برای مدیریت داده های پیچیده هستند. بیایید a را تعریف کنیم Customer
ضبط با تو در تو Address
رکورد:
public record Address(string Street, string City);
public record Customer(string Name)
{
// Optional property with a nested record
public Address? Address { get; init; }
}
مثال استفاده:
var customer = new Customer("Alice")
{
Address = new Address("123 Elm Street", "Springfield")
};
Console.WriteLine($"{customer.Name} lives at {customer.Address?.Street}, {customer.Address?.City}");
// Output: Alice lives at 123 Elm Street, Springfield
تو در تو Address
رکورد به طور یکپارچه ادغام می شود و ساختارهای داده ای تمیز و مختصر را امکان پذیر می کند.
اضافه کردن روش های سفارشی
روشهای سفارشی به شما امکان میدهند عملکرد خاصی را به رکوردها اضافه کنید. برای مثال، بیایید یک متد به a اضافه کنیم Transaction
ثبت برای محاسبه هزینه کل:
public record Transaction(string Item, int Quantity, decimal UnitPrice)
{
// Method to calculate the total cost
public decimal CalculateTotal() => Quantity * UnitPrice;
}
مثال استفاده:
var transaction = new Transaction("Laptop", 2, 1500.00m);
Console.WriteLine(transaction.CalculateTotal()); // Output: 3000.00
این روش رفتار را مستقیماً در رکورد محصور می کند و منطق را نزدیک به داده ها نگه می دارد.
تغییرناپذیری با with
عبارات
در حالی که رکوردها تغییر ناپذیر هستند، می توانید نمونه های جدیدی با ویژگی های اصلاح شده با استفاده از آن ایجاد کنید with
بیان این به ویژه زمانی مفید است که می خواهید داده ها را با حفظ شی اصلی به روز کنید.
بیایید تقویت کنیم Customer
ضبط با این ویژگی:
var originalCustomer = new Customer("Alice")
{
Address = new Address("123 Elm Street", "Springfield")
};
var updatedCustomer = originalCustomer with { Address = new Address("456 Oak Avenue", "Shelbyville") };
Console.WriteLine(originalCustomer.Address?.Street); // Output: 123 Elm Street
Console.WriteLine(updatedCustomer.Address?.Street); // Output: 456 Oak Avenue
این with
بیان تغییر ناپذیری را تضمین می کند و در عین حال امکان انعطاف پذیری را برای به روز رسانی فراهم می کند.
تکالیف برای آزمایش درک شما
سطح آسان
- ایجاد یک
Movie
رکورد با:-
Title
وDirector
به عنوان ویژگی های سازنده اولیه - یک ویژگی محاسبه شده
Description
که هر دو را ترکیب می کند.
-
خروجی نمونه:
var movie = new Movie("Inception", "Christopher Nolan");
Console.WriteLine(movie.Description); // Output: Inception by Christopher Nolan
- یک ویژگی اختیاری اضافه کنید
Rating
با استفاده ازinit
بهMovie
ثبت کنید.
سطح متوسط
- الف را تعریف کنید
Product
رکورد با:-
Name
وPrice
در سازنده اولیه - یک روش
ApplyDiscount(decimal percentage)
که جدید را برمی گرداندProduct
با قیمت تخفیف خورده
-
خروجی نمونه:
var product = new Product("Laptop", 2000.00m);
var discountedProduct = product.ApplyDiscount(10);
Console.WriteLine(discountedProduct.Price); // Output: 1800.00
- یک رکورد تودرتو اضافه کنید
Category
برای نشان دادن دسته محصول و ادغام آن درProduct
ثبت کنید.
سطح دشوار
- ایجاد کنید
Order
رکورد:- شامل شود
OrderId
،ItemName
،Quantity
، وUnitPrice
در سازنده اولیه - یک ویژگی محاسبه شده اضافه کنید
TotalPrice
که کل را محاسبه می کند. - یک روش اضافه کنید
UpdateQuantity(int newQuantity)
که جدید را برمی گرداندOrder
با مقدار به روز شده
- شامل شود
خروجی نمونه:
var order = new Order("ORD001", "Tablet", 2, 500.00m);
Console.WriteLine(order.TotalPrice); // Output: 1000.00
var updatedOrder = order.UpdateQuantity(5);
Console.WriteLine(updatedOrder.TotalPrice); // Output: 2500.00
زمان استفاده از رکوردها در مقابل کلاس ها
-
استفاده کنید سوابق برای:
- انواع داده محور غیرقابل تغییر
- سناریوهایی که نیاز به برابری مبتنی بر ارزش دارند.
- تعاریف تمیز و فشرده
-
استفاده کنید کلاس ها برای:
- انواع با رفتار قابل توجه یا حالت تغییرپذیر.
- سلسله مراتب و روابط پیچیده
نتیجه گیری
گسترش رکوردها با اعضای اضافی، ویژگی های محاسبه شده و روش ها به شما امکان می دهد مدل های داده همه کاره و قابل نگهداری ایجاد کنید. با استفاده از ویژگی هایی مانند init
کلمه کلیدی و with
عبارات، شما می توانید تغییر ناپذیری و انعطاف پذیری را متعادل کنید.