Equals и ReferenceEquals. Метод ToString.
В классе Object поддерживаются две версии Equals – общая и обычная. Общая версия имеет следующий синтаксис:
Overloads Public Shared Function Equals(0bject. Object) As Boolean
Пример использования:
Equals(a .b)
Синтаксис обычной версии:
Overloads Over-ridable Public Function Equals(Object) As Boolean
Пример использования:
a.Equals(b)
Обе версии метода Equals проверяют, обладают ли два объекта одинаковыми данными, но вы должны быть готовы переопределить Equals, если этого требует специфика вашего класса. Не забывайте, что общие члены класса не переопределяются, поэтому переопределение допускается лишь для обычной (не общей) версии Equals.
Например, если в вашей программе предусмотрены два способа представления некоторого структурного типа, позаботьтесь о том, чтобы это обстоятельство учитывалось методом Equals (именно так разработчики VB.NET поступили с классом String, хотя, строго говоря, этот класс не относится к структурным типам).
В классе Object также предусмотрен общий (и потому не переопределяемый) метод ReferenceEquals. Метод ReferenceEquals проверяет, представляют ли две переменные один экземпляр. Например, как показывает следующий фрагмент, для двух строк а и b выражение a.Equals(b) может быть истинным, а выражение Reference-Equals (a .b) – ложным:
Sub Main() Dim a As String = "hello" Dim b As String = "Hello" Mid(b.l.D= "h" Console.Writeline("Is a.Equals(b)true?" & a.Equals(b)) Console.WriteLine("Is ReferenceEquals(a.b)true?" & _ ReferenceEquals(a.b)) Console. ReadLine() End Sub
Результат показан на рис. 5.4.
Рис. 5.4. Различия между методами Equals и ReferenceEquals
Метод ToString
Метод ToString возвращает представление текущего объекта в строковом формате. Вопрос о том, будет ли это представление удобным при отладке и для пользователей, зависит от реализации класса. По умолчанию ToString возвращает полное имя типа для заданного объекта – например, System.Object или Examplel.Programmer.
Постарайтесь привыкнуть к переопределению ToStnng в ваших классах, чтобы этот метод возвращал более содержательное строковое представление класса. Например, в классе Employee из программы EmployeeTest1, приведенной в главе 4, метод ToString может выглядеть примерно так:
Public Overrides Function ToString() As String Dim temp As String temp = Me.GetType.ToString()& "my name is " & Me.TheName Return temp End Function
Примерный результат:
EmployeeTestl+EmployeeTestl+Employee my name is Tom