Методы базового класса System.Object в C# и их назначение:
ToString() – для быстрого и легкого получения строкового представления объекта.
GetHeshCode() – применяется, если объекты размещаются в отображении (хэш-таблица или словарь). Используется классами, которые работают с такими структурами, для определения того, куда в структуре поместить объект. Если класс должен применяться в качестве ключа для словаря, то для него потребуется перекрыть GetHeshCode().
Finalize() – выполняет роль деструктора, вызывается сборщиком мусора.
GetType() – возвращает экземпляр класса (порожденного от System.Type) который предоставляет обширную информацию о классе, членом которого является объект.
MemberwiseClone() – создает копию объекта и возвращает ссылку. Копируются только типы по значению. Если внутри класс содержит ссылки, то скопированы будут только эти ссылки, но не объекты, на которые они ссылаются.
ReferenceEquals() – используется для сравнения ссылок, проверяет, ссылаются ли две ссылки на один экземпляр класса (содержат ли ссылки один и тот же адрес в памяти). Считает что null равен null. ReferenceEquals() будет всегда возвращать flase для типов по значению, т.к. для типы по значению сначала упаковываются в объекты (!).
Equals() virtual – предназначен для сравнения значений. предназначен для случая, когда необходимо перекрыть его для сравнения значений экземпляров объектов (в частности, если нужно использовать экземпляры класса как ключи в словаре, то придется перекрыть этот метод для сравнения значений).
Equals() static – статическая версия делает практически тоже что и виртуальная + способна работать в ситуации когда один из объектов представляет собой null.
Если вызвать bool f = sA.Equals(sB), где sA и sB являются экземплярами некоторой структуры, то будет возвращено true в случае если sA и sB содержат одинаковые данные во всех своих полях.С другой стороны, по умолчанию перегруженная версия == для структур не доступна.