Csharp/CSharp Tutorial/Class/IEquatable

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

A class which implements comparison and equality interfaces

<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; class Person : IComparable<Person>, IEquatable<Person>, IComparable {

   public string Name;
   public int Age;
   public string Company;
   // Implements IComparable<Person>.rupareTo:
   public int CompareTo(Person other)
   {
       if (other == null)
           return -1;
       return this.Name.rupareTo(other.Name);
   }
   // Implements IComparable.rupareTo:
   public int CompareTo(object obj)
   {
       Person p = obj as Person;
       return CompareTo(p);
   }
   // Implements IEquatable<Person>.Equals:
   public bool Equals(Person other)
   {
       return ((IComparable<Person>)this).rupareTo(other) == 0;
   }
   // Overrides Object.Equals:
   public override bool Equals(object obj)
   {
       Person p = obj as Person;
       return Equals(p);
   }

} public class MainClass {

   public static void Main()
   {
       Person[] people = new Person[3];
       people[0] = new Person();
       people[0].Name = "S D"; people[0].Age = 20; people[0].rupany = "E";
       people[1] = new Person();
       people[1].Name = "M M"; people[1].Age = 40; people[1].rupany = "C";
       people[2] = new Person();
       people[2].Name = "J D"; people[2].Age = 30; people[2].rupany = "T";
       foreach (Person p in people)
           Console.Write(""{0},{1},{2}"\t", p.Name, p.Age, p.rupany);
       Console.WriteLine();
       Array.Sort(people);
       foreach (Person p in people)
           Console.Write(""{0},{1},{2}"\t", p.Name, p.Age, p.rupany);
   }

}</source>

"S D,20,E"      "M M,40,C"      "J D,30,T"
"J D,30,T"      "M M,40,C"      "S D,20,E"