Amalan Terbaik untuk Perbandingan Jenis Rujukan C#
Apabila berurusan dengan jenis rujukan, anda biasanya perlu membandingkan nilainya dan bukannya rujukannya. Walaupun mengatasi pengendali kesamaan (==) atau kaedah Equals adalah amalan biasa, terdapat kaedah lain yang perlu dipertimbangkan untuk memastikan jenis rujukan dibandingkan dengan betul dan cekap.
Melaksanakan System.IEquatable antara muka
Untuk nilai semantik dalam jenis rujukan (di mana kesetaraan bermakna sama), adalah disyorkan untuk menggunakan antara muka System.IEquatable. Antara muka ini menyediakan kaedah Equals ditaip kuat yang membolehkan perbandingan nilai mendalam. Dengan melaksanakan IEquatable, anda memastikan bahawa semakan kesaksamaan digunakan pada nilai sebenar objek, bukan hanya rujukannya.
Contoh:
Pertimbangkan kelas yang melaksanakan kesamaan nilai:
<code class="language-csharp">class Point : IEquatable<Point> { public Point(int x, int y) => (X, Y) = (x, y); public int X { get; } public int Y { get; } public bool Equals(Point other) => X == other.X && Y == other.Y; public static bool operator ==(Point lhs, Point rhs) => lhs.Equals(rhs); public static bool operator !=(Point lhs, Point rhs) => !lhs.Equals(rhs); public override bool Equals(object obj) => Equals(obj as Point); }</code>
Timpa kaedah kesamaan objek
Untuk jenis rujukan yang tidak mewakili nilai tidak berubah, tidak disyorkan untuk mengatasi pelaksanaan lalai Equals dalam kelas Object. Pelaksanaan lalai membandingkan rujukan objek, yang tidak selalunya ideal. Sebaliknya, pertimbangkan untuk menggunakan antara muka IEquatable untuk perbandingan nilai kedalaman.
GetHashCode override
Ia juga penting untuk mengatasi kaedah GetHashCode() apabila melaksanakan kesamaan untuk jenis rujukan. Ia memastikan bahawa objek dengan nilai yang sama mempunyai kod cincang yang sama, sekali gus meningkatkan prestasi apabila bekerja dengan koleksi cincang seperti kamus.
Butiran pelaksanaan:
Dalam contoh kod, kaedah Equals melakukan semakan nol dan kemudian melakukan semakan jenis untuk memastikan objek yang dibandingkan adalah daripada jenis yang sama. Perbandingan nilai sebenar dilakukan pada setiap atribut.
Kaedah GetHashCode menggabungkan kod cincang sifat X dan Y menggunakan kaedah HashCode.Combine(), memastikan kod cincang yang konsisten dijana untuk objek dengan nilai yang sama.
Dengan mematuhi amalan terbaik ini, pembangun boleh membandingkan jenis rujukan dengan cekap dan betul, memastikan operasi kesamaan adalah konsisten dengan semantik yang dimaksudkan objek.
Atas ialah kandungan terperinci Bagaimana untuk Membandingkan Jenis Rujukan Terbaik dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!