Guest User

Untitled

a guest
Nov 22nd, 2013
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.24 KB | None | 0 0
  1. using System;
  2.  
  3. namespace Client.Engine
  4. {
  5.     /// <summary>
  6.     /// Класс, описывающий переменную
  7.     /// </summary>
  8.     [Serializable]
  9.     class Variable: IEquatable<Variable>, IComparable
  10.     {
  11.         private static uint _counter;
  12.         public uint ID { get; set; }
  13.         public string Name { get; set; }
  14.  
  15.         public Variable()
  16.         {
  17.             ID = _counter++;
  18.         }
  19.  
  20.         public Variable(string name)
  21.         {
  22.             ID = _counter++;
  23.             Name = name;
  24.         }
  25.  
  26.         /// <summary>
  27.         /// Конструктор с параметрами
  28.         /// </summary>
  29.         /// <param name="id">ID переменной. Переменные с одинаковыми ID считаются одинаковыми</param>
  30.         /// <param name="name">Название переменной</param>
  31.         public Variable(uint id, string name = "")
  32.         {
  33.             ID = id;
  34.             Name = name;
  35.         }
  36.  
  37.         static Variable()
  38.         {
  39.             _counter = 0;
  40.         }
  41.  
  42.         public override bool Equals(object obj)
  43.         {
  44.             if (obj.GetType() != GetType()) return false;
  45.             return Equals((Variable) obj);
  46.         }
  47.        
  48.         public bool Equals(Variable obj)
  49.         {
  50.             return ID == obj.ID;
  51.         }
  52.  
  53.         bool IEquatable<Variable>.Equals(Variable other)
  54.         {
  55.             return Equals(other);
  56.         }
  57.  
  58.         public override int GetHashCode()
  59.         {
  60.             //Сформированная проверка хеша
  61.             unchecked
  62.             {
  63.                 return ((int)ID * 397) ^ (Name != null ? Name.GetHashCode() : 0);
  64.             }
  65.         }
  66.  
  67.         public override string ToString()
  68.         {
  69.             return ID.ToString("D") + ": " + Name;
  70.         }
  71.  
  72.         public int CompareTo(object obj)
  73.         {
  74.             if (GetType() != obj.GetType())
  75.                 return -1;
  76.             return CompareTo(obj as Variable);
  77.         }
  78.  
  79.         public int CompareTo(Variable obj)
  80.         {
  81.             if (ID < obj.ID)
  82.                 return -1;
  83.             if (ID == obj.ID)
  84.                 return 0;
  85.             return 1;
  86.         }
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment