برنامه نویسی

سفارشی سازی متدهای تولید شده توسط کامپایلر در رکوردهای سی شارپ با نمونه های کامل کد

Summarize this content to 400 words in Persian Lang
نحوه سفارشی سازی متدهای تولید شده توسط کامپایلر در رکوردهای سی شارپ از جمله ToString، PrintMembers، Equals، و GetHashCode. این راهنمای دقیق دارای نمونه‌های کد کاملی است که به شما کمک می‌کند تا بازنمایی رشته‌ها را بهبود ببخشید، منطق برابری پیشرفته را پیاده‌سازی کنید، و رکوردها را مطابق با نیازهای خاص خود تنظیم کنید.”

رکوردهای سی شارپ یک ویژگی قدرتمند برای ایجاد انواع داده های تغییرناپذیر با برابری مبتنی بر ارزش است. به طور پیش فرض، کامپایلر چندین روش برای رکوردها تولید می کند، از جمله ToString، Equals، GetHashCode، و PrintMembers. در حالی که پیاده‌سازی‌های پیش‌فرض معمولاً کافی هستند، سناریوهای خاصی ممکن است برای رفع نیازهای خاص نیاز به سفارشی‌سازی داشته باشند.

این مقاله نحوه سفارشی سازی این روش های تولید شده توسط کامپایلر را با توضیحات واضح و نمونه های کد کامل بررسی می کند.

مروری بر روش های تولید شده توسط کامپایلر در رکوردها

هنگامی که یک رکورد در سی شارپ تعریف می کنید، کامپایلر به طور خودکار ارائه می دهد:

ToString: یک نمایش رشته ای از رکورد، شامل نام نوع و ویژگی های آن ایجاد می کند.

Equals: رکوردها را بر اساس ارزش دارایی آنها مقایسه می کند.

GetHashCode: یک کد هش برگرفته از مقادیر ویژگی رکورد ایجاد می کند.

PrintMembers: استفاده داخلی توسط ToString برای قالب بندی نمایش رشته ای از ویژگی های رکورد.

این روش‌ها، رکوردها را قادر می‌سازد تا به صورت پیش‌بینی‌شده و کارآمد عمل کنند. با این حال، مواقعی وجود دارد که رفتار پیش فرض نیاز به تنظیم دارد.

سفارشی کردن ToString

را ToString متد یک نمایش رشته ای از یک رکورد، شامل نام نوع و مقادیر ویژگی را ارائه می دهد. ممکن است بخواهید این رفتار را برای خروجی خوانا یا دامنه خاص سفارشی کنید.

مثال: سفارشی کردن ToString

در اینجا روشی است که می توانید لغو کنید ToString برای یک Product رکورد و رکورد مشتق از آن DiscountedProduct:

using System;

public record Product(int Id, string Name, decimal Price)
{
public override string ToString() => $”Product: {Name} (ID: {Id}), Price: ${Price:F2}”;
}

public record DiscountedProduct(int Id, string Name, decimal Price, decimal Discount) : Product(Id, Name, Price)
{
public override string ToString() =>
$”{base.ToString()}, Discount: ${Discount:F2}, Final Price: ${(Price – Discount):F2}”;
}

class Program
{
static void Main()
{
var product = new Product(1, “Book”, 25.99m);
var discountedProduct = new DiscountedProduct(2, “Laptop”, 999.99m, 100m);

Console.WriteLine(product);
Console.WriteLine(discountedProduct);
}
}

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

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

خروجی:

Product: Book (ID: 1), Price: $25.99
Product: Laptop (ID: 2), Price: $999.99, Discount: $100.00, Final Price: $899.99

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

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

با نادیده گرفتن ToString، می توانید خروجی رشته را مطابق با نیازهای خاص خود تنظیم کنید.

سفارشی کردن PrintMembers

را ToString روش متکی بر PrintMembers روشی برای قالب بندی خصوصیات یک رکورد سفارشی کردن PrintMembers کنترل بیشتری بر نحوه نمایش خواص در خروجی فراهم می کند.

مثال: سفارشی کردن PrintMembers

در اینجا روشی است که می توانید لغو کنید PrintMembers برای کنترل خروجی:

using System;
using System.Text;

public record Product(int Id, string Name, decimal Price)
{
protected virtual bool PrintMembers(StringBuilder builder)
{
builder.Append($”ID = {Id}, Name = {Name}, Price = ${Price:F2}”);
return true;
}

public override string ToString()
{
var builder = new StringBuilder();
builder.Append(GetType().Name).Append(” { “);
if (PrintMembers(builder)) builder.Append(” }”);
return builder.ToString();
}
}

public record DiscountedProduct(int Id, string Name, decimal Price, decimal Discount) : Product(Id, Name, Price)
{
protected override bool PrintMembers(StringBuilder builder)
{
base.PrintMembers(builder);
builder.Append($”, Discount = ${Discount:F2}, Final Price = ${(Price – Discount):F2}”);
return true;
}
}

class Program
{
static void Main()
{
var product = new Product(1, “Book”, 25.99m);
var discountedProduct = new DiscountedProduct(2, “Laptop”, 999.99m, 100m);

Console.WriteLine(product);
Console.WriteLine(discountedProduct);
}
}

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

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

خروجی:

Product { ID = 1, Name = Book, Price = $25.99 }
DiscountedProduct { ID = 2, Name = Laptop, Price = $999.99, Discount = $100.00, Final Price = $899.99 }

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

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

این رویکرد کنترل گرانولی را بر نحوه قالب بندی ویژگی ها در زمان ارائه می دهد ToString نامیده می شود.

سفارشی کردن Equals و GetHashCode

سفارشی کردن Equals و GetHashCode می تواند برای سناریوهای پیشرفته که برابری مبتنی بر ارزش پیش فرض کافی نیست مفید باشد.

مثال: سفارشی کردن Equals و GetHashCode

در اینجا نحوه سفارشی کردن این روش ها برای شما آورده شده است Product رکورد:

using System;

public record Product(int Id, string Name, decimal Price)
{
public override bool Equals(object? obj) =>
obj is Product product &&
Id == product.Id &&
Name == product.Name &&
Price == product.Price;

public override int GetHashCode() => HashCode.Combine(Id, Name, Price);
}

class Program
{
static void Main()
{
var product1 = new Product(1, “Book”, 25.99m);
var product2 = new Product(1, “Book”, 25.99m);
var product3 = new Product(2, “Laptop”, 999.99m);

Console.WriteLine(product1.Equals(product2)); // Output: True
Console.WriteLine(product1.Equals(product3)); // Output: False
}
}

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

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

خروجی:

True
False

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

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

این مثال تضمین می کند که برابری فقط بر اساس است Id، Name، و Price خواص

زمان سفارشی کردن متدها در رکوردها

سناریوهایی برای سفارشی سازی

ورود به سیستم: ارائه اطلاعات دقیق و واضح برای اشکال زدایی یا نظارت.

خوانایی بهبود یافته: نمایش رشته را به گونه ای تنظیم کنید که کاربر پسند یا مختص دامنه باشد.

قالب بندی پیشرفته: مقادیر مشتق شده یا محاسبه شده را در خروجی قرار دهید.

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

استفاده کنید ToString برای نمایش رشته های همه منظوره
اهرم PrintMembers برای کنترل دقیق بر قالب بندی رشته ها.
لغو Equals و GetHashCode فقط در صورت لزوم

نتیجه گیری

رکوردهای سی شارپ انواع داده های تغییرناپذیر را با تولید روش هایی مانند ToString، Equals، GetHashCode، و PrintMembers. در حالی که پیاده‌سازی‌های پیش‌فرض برای اکثر موارد کاربردی کار می‌کنند، سفارشی‌سازی این روش‌ها می‌تواند کنترل بهتری را به‌ویژه برای ورود به سیستم، اشکال‌زدایی و الزامات دامنه خاص ارائه دهد.

مثال های ارائه شده در این مقاله نشان می دهد که چگونه می توان این روش ها را به طور موثر نادیده گرفت و سفارشی کرد. کد را آزمایش کنید تا احتمالات بیشتر را کشف کنید و سوابق را مطابق با نیازهای خود تنظیم کنید.

نحوه سفارشی سازی متدهای تولید شده توسط کامپایلر در رکوردهای سی شارپ از جمله ToString، PrintMembers، Equals، و GetHashCode. این راهنمای دقیق دارای نمونه‌های کد کاملی است که به شما کمک می‌کند تا بازنمایی رشته‌ها را بهبود ببخشید، منطق برابری پیشرفته را پیاده‌سازی کنید، و رکوردها را مطابق با نیازهای خاص خود تنظیم کنید.”

رکوردهای سی شارپ یک ویژگی قدرتمند برای ایجاد انواع داده های تغییرناپذیر با برابری مبتنی بر ارزش است. به طور پیش فرض، کامپایلر چندین روش برای رکوردها تولید می کند، از جمله ToString، Equals، GetHashCode، و PrintMembers. در حالی که پیاده‌سازی‌های پیش‌فرض معمولاً کافی هستند، سناریوهای خاصی ممکن است برای رفع نیازهای خاص نیاز به سفارشی‌سازی داشته باشند.

این مقاله نحوه سفارشی سازی این روش های تولید شده توسط کامپایلر را با توضیحات واضح و نمونه های کد کامل بررسی می کند.


مروری بر روش های تولید شده توسط کامپایلر در رکوردها

هنگامی که یک رکورد در سی شارپ تعریف می کنید، کامپایلر به طور خودکار ارائه می دهد:

  • ToString: یک نمایش رشته ای از رکورد، شامل نام نوع و ویژگی های آن ایجاد می کند.
  • Equals: رکوردها را بر اساس ارزش دارایی آنها مقایسه می کند.
  • GetHashCode: یک کد هش برگرفته از مقادیر ویژگی رکورد ایجاد می کند.
  • PrintMembers: استفاده داخلی توسط ToString برای قالب بندی نمایش رشته ای از ویژگی های رکورد.

این روش‌ها، رکوردها را قادر می‌سازد تا به صورت پیش‌بینی‌شده و کارآمد عمل کنند. با این حال، مواقعی وجود دارد که رفتار پیش فرض نیاز به تنظیم دارد.


سفارشی کردن ToString

را ToString متد یک نمایش رشته ای از یک رکورد، شامل نام نوع و مقادیر ویژگی را ارائه می دهد. ممکن است بخواهید این رفتار را برای خروجی خوانا یا دامنه خاص سفارشی کنید.

مثال: سفارشی کردن ToString

در اینجا روشی است که می توانید لغو کنید ToString برای یک Product رکورد و رکورد مشتق از آن DiscountedProduct:

using System;

public record Product(int Id, string Name, decimal Price)
{
    public override string ToString() => $"Product: {Name} (ID: {Id}), Price: ${Price:F2}";
}

public record DiscountedProduct(int Id, string Name, decimal Price, decimal Discount) : Product(Id, Name, Price)
{
    public override string ToString() =>
        $"{base.ToString()}, Discount: ${Discount:F2}, Final Price: ${(Price - Discount):F2}";
}

class Program
{
    static void Main()
    {
        var product = new Product(1, "Book", 25.99m);
        var discountedProduct = new DiscountedProduct(2, "Laptop", 999.99m, 100m);

        Console.WriteLine(product);
        Console.WriteLine(discountedProduct);
    }
}
وارد حالت تمام صفحه شوید

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

خروجی:

Product: Book (ID: 1), Price: $25.99
Product: Laptop (ID: 2), Price: $999.99, Discount: $100.00, Final Price: $899.99
وارد حالت تمام صفحه شوید

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

با نادیده گرفتن ToString، می توانید خروجی رشته را مطابق با نیازهای خاص خود تنظیم کنید.


سفارشی کردن PrintMembers

را ToString روش متکی بر PrintMembers روشی برای قالب بندی خصوصیات یک رکورد سفارشی کردن PrintMembers کنترل بیشتری بر نحوه نمایش خواص در خروجی فراهم می کند.

مثال: سفارشی کردن PrintMembers

در اینجا روشی است که می توانید لغو کنید PrintMembers برای کنترل خروجی:

using System;
using System.Text;

public record Product(int Id, string Name, decimal Price)
{
    protected virtual bool PrintMembers(StringBuilder builder)
    {
        builder.Append($"ID = {Id}, Name = {Name}, Price = ${Price:F2}");
        return true;
    }

    public override string ToString()
    {
        var builder = new StringBuilder();
        builder.Append(GetType().Name).Append(" { ");
        if (PrintMembers(builder)) builder.Append(" }");
        return builder.ToString();
    }
}

public record DiscountedProduct(int Id, string Name, decimal Price, decimal Discount) : Product(Id, Name, Price)
{
    protected override bool PrintMembers(StringBuilder builder)
    {
        base.PrintMembers(builder);
        builder.Append($", Discount = ${Discount:F2}, Final Price = ${(Price - Discount):F2}");
        return true;
    }
}

class Program
{
    static void Main()
    {
        var product = new Product(1, "Book", 25.99m);
        var discountedProduct = new DiscountedProduct(2, "Laptop", 999.99m, 100m);

        Console.WriteLine(product);
        Console.WriteLine(discountedProduct);
    }
}
وارد حالت تمام صفحه شوید

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

خروجی:

Product { ID = 1, Name = Book, Price = $25.99 }
DiscountedProduct { ID = 2, Name = Laptop, Price = $999.99, Discount = $100.00, Final Price = $899.99 }
وارد حالت تمام صفحه شوید

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

این رویکرد کنترل گرانولی را بر نحوه قالب بندی ویژگی ها در زمان ارائه می دهد ToString نامیده می شود.


سفارشی کردن Equals و GetHashCode

سفارشی کردن Equals و GetHashCode می تواند برای سناریوهای پیشرفته که برابری مبتنی بر ارزش پیش فرض کافی نیست مفید باشد.

مثال: سفارشی کردن Equals و GetHashCode

در اینجا نحوه سفارشی کردن این روش ها برای شما آورده شده است Product رکورد:

using System;

public record Product(int Id, string Name, decimal Price)
{
    public override bool Equals(object? obj) =>
        obj is Product product &&
        Id == product.Id &&
        Name == product.Name &&
        Price == product.Price;

    public override int GetHashCode() => HashCode.Combine(Id, Name, Price);
}

class Program
{
    static void Main()
    {
        var product1 = new Product(1, "Book", 25.99m);
        var product2 = new Product(1, "Book", 25.99m);
        var product3 = new Product(2, "Laptop", 999.99m);

        Console.WriteLine(product1.Equals(product2)); // Output: True
        Console.WriteLine(product1.Equals(product3)); // Output: False
    }
}
وارد حالت تمام صفحه شوید

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

خروجی:

True
False
وارد حالت تمام صفحه شوید

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

این مثال تضمین می کند که برابری فقط بر اساس است Id، Name، و Price خواص


زمان سفارشی کردن متدها در رکوردها

سناریوهایی برای سفارشی سازی

  1. ورود به سیستم: ارائه اطلاعات دقیق و واضح برای اشکال زدایی یا نظارت.
  2. خوانایی بهبود یافته: نمایش رشته را به گونه ای تنظیم کنید که کاربر پسند یا مختص دامنه باشد.
  3. قالب بندی پیشرفته: مقادیر مشتق شده یا محاسبه شده را در خروجی قرار دهید.

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

  • استفاده کنید ToString برای نمایش رشته های همه منظوره
  • اهرم PrintMembers برای کنترل دقیق بر قالب بندی رشته ها.
  • لغو Equals و GetHashCode فقط در صورت لزوم

نتیجه گیری

رکوردهای سی شارپ انواع داده های تغییرناپذیر را با تولید روش هایی مانند ToString، Equals، GetHashCode، و PrintMembers. در حالی که پیاده‌سازی‌های پیش‌فرض برای اکثر موارد کاربردی کار می‌کنند، سفارشی‌سازی این روش‌ها می‌تواند کنترل بهتری را به‌ویژه برای ورود به سیستم، اشکال‌زدایی و الزامات دامنه خاص ارائه دهد.

مثال های ارائه شده در این مقاله نشان می دهد که چگونه می توان این روش ها را به طور موثر نادیده گرفت و سفارشی کرد. کد را آزمایش کنید تا احتمالات بیشتر را کشف کنید و سوابق را مطابق با نیازهای خود تنظیم کنید.

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

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

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

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