Resumo : neste tutorial, você aprenderá sobre a classe C# Object e como substituir os métodos da Object
classe, incluindo ToString()
, Equals()
e GetHashCode()
.
Introdução à classe de objeto C#
Todos os tipos no .NET herdam implicitamente da System.Object
classe. Em outras palavras, the System.Object
é a classe base de todas as classes. A System.Object
classe fornece funcionalidades de baixo nível para as subclasses.
Observe que o objeto é sinônimo da System.Object
classe. Portanto, eles se referem ao mesmo objeto.
Quando você define uma classe , ela é herdada implicitamente da System.Object
classe. E você não precisa especificá-lo explicitamente.
O exemplo a seguir define a Person
classe:
class Person
{
public string SSN { get; set; }
public string Name { get; set; }
public byte Age { get; set; }
public Person(string ssn, string name, byte age)
{
SSN = ssn;
Name = name;
Age = age;
}
}
Linguagem de código: C# ( cs )
Neste exemplo, a Person
classe herda implicitamente da System.Object
classe. Ele pode reutilizar ou personalizar os métodos da Object
classe.
Por exemplo, o GetType()
método retorna o tipo de uma instância de uma classe:
// Program.cs
var p1 = new Person("545–57-1111", "John Doe", 25);
Console.WriteLine(p1.GetType());
Linguagem de código: C# ( cs )
Saída:
Person
Linguagem de código: C# ( cs )
Neste exemplo, chamamos o GetType()
método em uma instância da Person
classe. Portanto, seu tipo é Person
.
Para sequenciar()
O ToString()
método retorna a representação em string de um objeto. Por padrão, ToString()
retorna o tipo do objeto. Por exemplo:
// Program.cs
var p1 = new Person("545–57-1111", "John Doe", 25);
Console.WriteLine(p1.ToString());
Linguagem de código: C# ( cs )
Saída:
Person
Linguagem de código: C# ( cs )
Observe que você não precisa chamar o ToString()
método explicitamente:
// Program.cs
var p1 = new Person("545–57-1111", "John Doe", 25);
Console.WriteLine(p1);
Linguagem de código: C# ( cs )
Para personalizar a representação de string de um objeto, você pode substituir o ToString()
método da System.Object
classe. Por exemplo:
class Person
{
public string SSN { get; set; }
public string Name { get; set; }
public byte Age { get; set; }
public Person(string ssn, string name, byte age)
{
SSN = ssn;
Name = name;
Age = age;
}
public override string ToString()
{
return $"Person(ssn={SSN},name={Name},age={Age})";
}
}
Linguagem de código: C# ( cs )
Neste exemplo, substituímos o ToString()
método da System.Object
classe para retornar uma representação em string dos Person
objetos ‘.
// Program.cs
var p1 = new Person("545–57-1111", "John Doe", 25);
Console.WriteLine(p1);
Linguagem de código: C# ( cs )
Saída:
Person(ssn=545-57-1111,name=John Doe,age=25)
Linguagem de código: C# ( cs )
É igual a()
Para comparar dois objetos, você usa o Equals
método da System.Object
classe.
Normalmente, você precisa substituir o Equals
método em sua classe para especificar a lógica para determinar se dois objetos são iguais. Por exemplo:
class Person
{
public string SSN { get; set; }
public string Name { get; set; }
public byte Age { get; set; }
public Person(string ssn, string name, byte age)
{
SSN = ssn;
Name = name;
Age = age;
}
public override string ToString()
{
return $"Person(ssn={SSN},name={Name},age={Age})";
}
public override bool Equals(object? obj)
{
if (obj == null || !GetType().Equals(obj.GetType()))
{
return false;
}
var other = (Person)obj;
return SSN == other.SSN;
}
}
Linguagem de código: C# ( cs )
Neste exemplo, substituímos o Equals
método da System.Object
classe na Person
classe.
Se o objeto for null
ou seu tipo não for o mesmo, o Equals
método retornará false
. Caso contrário, retorna true
se os números de segurança social (SSN) de duas pessoas forem iguais.
// Program.cs
var p1 = new Person("545–57-1111", "Jane Doe", 22);
var p2 = new Person("545–57-1111", "Jane Smith", 23);
Console.WriteLine(p1.Equals(p2));
Linguagem de código: C# ( cs )
Saída:
True
Linguagem de código: C# ( cs )
ObterHashCode()
O GetHashCode()
método retorna um código hash para o objeto atual. C# usa o código hash retornado pelo GetHashCode()
método para verificar a igualdade do objeto.
Se dois objetos forem iguais, o GetHashCode()
método retornará o mesmo código hash. Entretanto, o contrário não é verdade. Os códigos hash iguais não significam igualdade de objetos porque objetos desiguais podem ter os mesmos códigos hash.
O seguinte mostra como substituir o GetHashCode()
método:
class Person
{
public string SSN { get; set; }
public string Name { get; set; }
public byte Age { get; set; }
public Person(string ssn, string name, byte age)
{
SSN = ssn;
Name = name;
Age = age;
}
public override string ToString()
{
return $"Person(ssn={SSN},name={Name},age={Age})";
}
public override bool Equals(object? obj)
{
if (obj == null || !GetType().Equals(obj.GetType()))
{
return false;
}
var other = (Person)obj;
return SSN.Equals(other.SSN);
}
public override int GetHashCode()
{
return SSN.GetHashCode();
}
}
Linguagem de código: C# ( cs )
Resumo
- A
System.Object
é a classe base de todas as classes em .NET - The
object
é o alias daSystem.Object
classe. - Substitua o
ToString()
para personalizar a representação de string do objeto. - Substitua o
Equals()
método para determinar se dois objetos são iguais. - Substitua o
GetHashCode()
método para retornar um código hash para o objeto