Шаг 136 - Своя функция Equals

Если мы перегружаем функцию, то должны перегрузить и функцию GetHashCode наоборот если заходим изменить Equals то должны перегрузить функцию получения хеш кодов. Короче взаимосвязанные они. Смотрим пример:

using System;

class MyClass
{
	public override  int GetHashCode()
	{
		return x1+x2+x3;
	}
	
	public override bool Equals(object obj)
	{
		MyClass o = (MyClass) obj;
		if (o.GetHashCode()==this.GetHashCode())
		{
			if (x1 != o.x1)  return false;
			if (x2 != o.x2)  return false;
			if (x3 != o.x3)  return false;
			return true;
		}
		else return false;
	}
	public int x1=0;
	public int x2=0;
	public int x3=0;
}

class MainClass
{
	public static void Main(string[] args)
	{
		MyClass c1 = new MyClass();
		c1.x1=1;
		c1.x2=1;
		c1.x3=1;
		MyClass c2 = new MyClass();
		c2.x1=2;
		c2.x2=2;
		c2.x3=2;
		MyClass c3 = new MyClass();
		c3.x1=1;
		c3.x2=1;
		c3.x3=1;
		if (c1.Equals(c2)) Console.WriteLine("c1=c2");
		if (c1.Equals(c3)) Console.WriteLine("c1=c3"); 
	}
}

Я создал свою функцию получения хеш кода. Конечно совсем простую и конечно много вариантов могут получить один и тот же код. Гарантия только одна, что если они не совпадают то классы точно разные. А вот если совпадают нужно еще раз все проверить, чтобы убедиться точно.

gif/136_1.gif (2439 b)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 23.10.2001