Objeto C#

Resumo : neste tutorial, você aprenderá sobre a classe C# Object e como substituir os métodos da Objectclasse, incluindo ToString(), Equals()e GetHashCode().

Introdução à classe de objeto C#

Todos os tipos no .NET herdam implicitamente da System.Objectclasse. Em outras palavras, the System.Objecté a classe base de todas as classes. A System.Objectclasse fornece funcionalidades de baixo nível para as subclasses.

Observe que o objeto é sinônimo da System.Objectclasse. Portanto, eles se referem ao mesmo objeto.

Quando você define uma classe , ela é herdada implicitamente da System.Objectclasse. E você não precisa especificá-lo explicitamente.

O exemplo a seguir define a Personclasse:

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 Personclasse herda implicitamente da System.Objectclasse. Ele pode reutilizar ou personalizar os métodos da Objectclasse.

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:

PersonLinguagem de código:  C#  ( cs )

Neste exemplo, chamamos o GetType()método em uma instância da Personclasse. 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:

PersonLinguagem 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.Objectclasse. 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.Objectclasse para retornar uma representação em string dos Personobjetos ‘.

// 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 Equalsmétodo da System.Objectclasse.

Normalmente, você precisa substituir o Equalsmé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 Equalsmétodo da System.Objectclasse na Personclasse.

Se o objeto for nullou seu tipo não for o mesmo, o Equalsmétodo retornará false. Caso contrário, retorna truese 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:

TrueLinguagem 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 da System.Objectclasse.
  • 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

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *