Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Membandingkan Jenis Rujukan Terbaik dalam .NET?

Bagaimana untuk Membandingkan Jenis Rujukan Terbaik dalam .NET?

Mary-Kate Olsen
Lepaskan: 2025-01-07 17:51:40
asal
231 orang telah melayarinya

How to Best Compare Reference Types in .NET?

Amalan Terbaik untuk Perbandingan Jenis Rujukan .NET

Apabila membandingkan jenis rujukan dalam .NET, adalah penting untuk memahami perbezaan antara kesamaan rujukan dan kesamaan nilai. Kesamaan rujukan menyemak sama ada dua rujukan menghala ke objek yang sama, manakala kesamaan nilai menyemak sama ada objek mempunyai data yang sama.

Timpa pengendali kesamaan (==) dan kaedah Equals

Adalah tidak disyorkan untuk mengatasi pengendali kesamaan (==) dan/atau kaedah Equals untuk membandingkan jenis rujukan melainkan jenis tersebut menyatakan nilai semantik (iaitu, objek tidak berubah yang dianggap sama berdasarkan datanya). Dalam kes ini, pertimbangkan untuk melaksanakan antara muka System.IEquatable dan tiga operator: Equals, GetHashCode dan ==/!=.

Antara muka boleh sama

Jika jenis rujukan anda mewakili semantik nilai, laksanakan System.IEquatable. Ini memastikan pelaksanaan kesamaan nilai yang betul dan cekap, termasuk pengendalian identiti objek dan kesamaan nilai secara berasingan.

Antara muka yang setanding

ICcomparable direka terutamanya untuk digunakan dengan jenis nilai, bukan jenis rujukan. Elakkan menggunakannya dengan jenis rujukan.

Perbandingan tersuai

Daripada mengatasi pengendali kesaksamaan atau melaksanakan IComparable, pertimbangkan untuk mencipta kaedah tersuai untuk membandingkan jenis rujukan. Gunakan kaedah Equals untuk menyemak identiti objek dan mengatasinya untuk membandingkan sifat berkaitan.

Contoh nilai yang sama

Berikut ialah contoh pelaksanaan kesamaan nilai untuk kelas Point:

<code class="language-csharp">class Point : IEquatable<Point>
{
    public int X { get; }
    public int Y { get; }

    public Point(int x = 0, int y = 0) { X = x; Y = y; }

    public bool Equals(Point other)
    {
        if (other is null) return false;
        return X.Equals(other.X) && Y.Equals(other.Y);
    }

    public override bool Equals(object obj) => Equals(obj as Point);

    public static bool operator ==(Point lhs, Point rhs) => object.Equals(lhs, rhs);

    public static bool operator !=(Point lhs, Point rhs) => !(lhs == rhs);

    public override int GetHashCode() => HashCode.Combine(X, Y);
}</code>
Salin selepas log masuk

Kesimpulan

Untuk jenis rujukan dengan semantik nilai, laksanakan System.IEquatable dan ketiga-tiga pengendali kesamaan (Equals, GetHashCode, ==/!=). Untuk kelas rujukan yang mewakili nilai boleh ubah, jangan mengatasi pengendali ==/!=. Gunakan tingkah laku lalai mereka untuk menyemak identiti objek.

Atas ialah kandungan terperinci Bagaimana untuk Membandingkan Jenis Rujukan Terbaik dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan