برنامه نویسی

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 بیان تغییر ناپذیری را تضمین می کند و در عین حال امکان انعطاف پذیری را برای به روز رسانی فراهم می کند.


تکالیف برای آزمایش درک شما

سطح آسان

  1. ایجاد یک Movie رکورد با:
    • Title و Director به عنوان ویژگی های سازنده اولیه
    • یک ویژگی محاسبه شده Description که هر دو را ترکیب می کند.

خروجی نمونه:

   var movie = new Movie("Inception", "Christopher Nolan");
   Console.WriteLine(movie.Description); // Output: Inception by Christopher Nolan
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. یک ویژگی اختیاری اضافه کنید Rating با استفاده از init به Movie ثبت کنید.

سطح متوسط

  1. الف را تعریف کنید 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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. یک رکورد تودرتو اضافه کنید Category برای نشان دادن دسته محصول و ادغام آن در Product ثبت کنید.

سطح دشوار

  1. ایجاد کنید 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 عبارات، شما می توانید تغییر ناپذیری و انعطاف پذیری را متعادل کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا