все классы C# переопределяют Equals и GetHashCode? Для правильностидолжны ли все классы C# реализовать Equals и GetHashCode?
ответ
Все классы, чтобы наследовать это от System.Object
.
Если вам нужно предоставить определенный Equals или GetHashCode для класса, вы должны переопределить методы в своих классах. В противном случае просто оставить их ..
http://msdn.microsoft.com/en-us/library/system.object.gethashcode(v=VS.71).aspx
Нет, они уже делают.
Следует ли им переопределять их, зависит от того, как он будет использоваться. В большинстве случаев это не требуется.
Все классы уже наследуют эти методы из базового класса System.Object.
Вы можете переопределить методы в производных классах, если вам нужно сравнить два экземпляра объекта за пределами простого ссылочного равенства, в противном случае это необязательно.
Помните, однако, что если вы решите переопределить одну из них, вам также необходимо переопределить другую, чтобы гарантировать, что Hashtables и словарные ключи, между прочим, работают правильно с вашим производным классом. Метод GetHashCode должен отражать ту же логику, что и метод Equals. Смотрите здесь для более подробных разъяснений и примеров:
http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx
и
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx
См. Также: http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c –
Может быть, не все, но все классы, которые будут помещены в какой-то мешок (IList, ICollection, IDictionary , Hashset и т. Д.) И нужен простой метод для их дифференциации (просто подумайте о Sort()
, Contains()
, BinarySearch()
и т. Д.).
Если вы используете класс таким образом, вы должны обязательно их реализовать правильно.
Когда вы переопределяете
Equals
, в основном. Если вы хотите представить другую идею равенства, отличную от простой ссылки .Строка является хорошим примером этого - две строк равны (при простом Равно вызова), если они представляют собой же последовательность символов. Код хэша отражает это, так что если две строки равны, они будут иметь один и тот же хэш-код . (Реверс не обязательно true - две неравные строки могут иметь одинаковый хэш-код, но это маловероятно.)
(Strings хитры другими способами, учти - есть много различных идей равенства на основе культуры и корпуса, но
String.Equals
выглядит в точках UTF-16 кодов, которые делают вверх по строка, и сравнивает их в простейшей мыслимой моды)
- 1. Правильно Реализовать Equals и GetHashCode в подклассах
- 2. C# Внедрение метода Equals правильно и как реализовать метод GetHashCode
- 3. Equals и GetHashCode
- 4. NHibernate Equals и GetHashCode
- 5. Implemeting GetHashCode и Equals методы ValueObjects
- 6. В структуре, допустимо ли реализовать оператор == через Equals, но не переопределять Equals и GetHashCode?
- 7. Equals, GetHashCode, EqualityComparers и нечеткое равенство
- 8. GetHashCode и Equals реализованы неправильно в System.Attribute?
- 9. Выполнение GetHashCode() и Equals() для сохраняемых объектов
- 10. C# GetHashCode/Equals override not called
- 11. Как реализовать переопределение GetHashCode() с логикой переопределения Equals()
- 12. Почему я должен переопределять .Equals и GetHashCode в C#
- 13. GetHashCode Внедрение Equals для класса в C#
- 14. Должны ли все классы реализовывать интерфейс IDisposable?
- 15. CompositeId и перекрытая GetHashCode() и Equals() методы
- 16. C# Это плохой способ реализовать GetHashCode?
- 17. Свойства или поля в Equals и GetHashCode?
- 18. Как переопределить Equals и GetHashCode для HashSet?
- 19. C#, Какие классы/члены класса следует учитывать при переопределении GetHashCode и Equals?
- 20. Должен ли я переопределять GetHashCode и Equals в новых классах?
- 21. Должен ли я реализовать equals и hashCode в классе домена?
- 22. Правильный способ переопределить Equals() и GetHashCode()
- 23. Какова лучшая стратегия для Equals и GetHashCode?
- 24. EqualityComparer <Type> GetHashCode и Equals
- 25. Должны ли все Фронтальные классы использовать Singleton?
- 26. NHibernate set: Должен ли я переопределять Equals и GetHashCode?
- 27. Должны ли все классы Python расширять объект?
- 28. C++ BlackBerry10: Должны ли все пользовательские классы расширяться из QObject?
- 29. Должны ли мы реализовать все методы и свойства протокола?
- 30. Работают ли операторы набора HashSet на основе GetHashCode() или Equals()?
возможно дубликат:. http://stackoverflow.com/questions/732930/when-to-override-gethashcode – BrokenGlass