Object Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Suporta todas as classes na hierarquia de classes .NET e fornece serviços de baixo nível a classes derivadas. Esta é a classe base definitiva de todas as classes .NET; é a raiz da hierarquia de tipos.
public ref class System::Object
public class Object
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
[System.Serializable]
public class Object
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class Object
type obj = class
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)>]
[<System.Serializable>]
type obj = class
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type obj = class
Public Class Object
- Atributos
Exemplos
O exemplo seguinte define um tipo de Ponto derivado da Object classe e sobrepõe muitos dos métodos virtuais da Object classe. Além disso, o exemplo mostra como chamar muitos dos métodos estáticos e de instância da Object classe.
using System;
// The Point class is derived from System.Object.
class Point
{
public int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
public override bool Equals(object obj)
{
// If this and obj do not refer to the same type, then they are not equal.
if (obj.GetType() != this.GetType()) return false;
// Return true if x and y fields match.
var other = (Point) obj;
return (this.x == other.x) && (this.y == other.y);
}
// Return the XOR of the x and y fields.
public override int GetHashCode()
{
return x ^ y;
}
// Return the point's value as a string.
public override String ToString()
{
return $"({x}, {y})";
}
// Return a copy of this point object by making a simple field copy.
public Point Copy()
{
return (Point) this.MemberwiseClone();
}
}
public sealed class App
{
static void Main()
{
// Construct a Point object.
var p1 = new Point(1,2);
// Make another Point object that is a copy of the first.
var p2 = p1.Copy();
// Make another variable that references the first Point object.
var p3 = p1;
// The line below displays false because p1 and p2 refer to two different objects.
Console.WriteLine(Object.ReferenceEquals(p1, p2));
// The line below displays true because p1 and p2 refer to two different objects that have the same value.
Console.WriteLine(Object.Equals(p1, p2));
// The line below displays true because p1 and p3 refer to one object.
Console.WriteLine(Object.ReferenceEquals(p1, p3));
// The line below displays: p1's value is: (1, 2)
Console.WriteLine($"p1's value is: {p1.ToString()}");
}
}
// This code example produces the following output:
//
// False
// True
// True
// p1's value is: (1, 2)
//
open System
// The Point class is derived from System.Object.
type Point(x, y) =
member _.X = x
member _.Y = y
override _.Equals obj =
// If this and obj do not refer to the same type, then they are not equal.
match obj with
| :? Point as other ->
// Return true if x and y fields match.
x = other.X && y = other.Y
| _ ->
false
// Return the XOR of the x and y fields.
override _.GetHashCode() =
x ^^^ y
// Return the point's value as a string.
override _.ToString() =
$"({x}, {y})"
// Return a copy of this point object by making a simple field copy.
member this.Copy() =
this.MemberwiseClone() :?> Point
// Construct a Point object.
let p1 = Point(1,2)
// Make another Point object that is a copy of the first.
let p2 = p1.Copy()
// Make another variable that references the first Point object.
let p3 = p1
// The line below displays false because p1 and p2 refer to two different objects.
printfn $"{Object.ReferenceEquals(p1, p2)}"
// The line below displays true because p1 and p2 refer to two different objects that have the same value.
printfn $"{Object.Equals(p1, p2)}"
// The line below displays true because p1 and p3 refer to one object.
printfn $"{Object.ReferenceEquals(p1, p3)}"
// The line below displays: p1's value is: (1, 2)
printfn $"p1's value is: {p1.ToString()}"
// This code example produces the following output:
//
// False
// True
// True
// p1's value is: (1, 2)
//
' The Point class is derived from System.Object.
Class Point
Public x, y As Integer
Public Sub New(ByVal x As Integer, ByVal y As Integer)
Me.x = x
Me.y = y
End Sub
Public Overrides Function Equals(ByVal obj As Object) As Boolean
' If Me and obj do not refer to the same type, then they are not equal.
Dim objType As Type = obj.GetType()
Dim meType As Type = Me.GetType()
If Not objType.Equals(meType) Then
Return False
End If
' Return true if x and y fields match.
Dim other As Point = CType(obj, Point)
Return Me.x = other.x AndAlso Me.y = other.y
End Function
' Return the XOR of the x and y fields.
Public Overrides Function GetHashCode() As Integer
Return (x << 1) XOR y
End Function
' Return the point's value as a string.
Public Overrides Function ToString() As String
Return $"({x}, {y})"
End Function
' Return a copy of this point object by making a simple field copy.
Public Function Copy() As Point
Return CType(Me.MemberwiseClone(), Point)
End Function
End Class
NotInheritable Public Class App
Shared Sub Main()
' Construct a Point object.
Dim p1 As New Point(1, 2)
' Make another Point object that is a copy of the first.
Dim p2 As Point = p1.Copy()
' Make another variable that references the first Point object.
Dim p3 As Point = p1
' The line below displays false because p1 and p2 refer to two different objects.
Console.WriteLine([Object].ReferenceEquals(p1, p2))
' The line below displays true because p1 and p2 refer to two different objects
' that have the same value.
Console.WriteLine([Object].Equals(p1, p2))
' The line below displays true because p1 and p3 refer to one object.
Console.WriteLine([Object].ReferenceEquals(p1, p3))
' The line below displays: p1's value is: (1, 2)
Console.WriteLine($"p1's value is: {p1.ToString()}")
End Sub
End Class
' This example produces the following output:
'
' False
' True
' True
' p1's value is: (1, 2)
'
Observações
A Object classe é a classe base final de todas as classes .NET, é a raiz da hierarquia de tipos.
Como todas as classes no .NET são derivadas do Object, cada método definido na Object classe está disponível em todos os objetos no sistema. As classes derivadas podem substituir alguns desses métodos, incluindo:
- Equals: Suporta comparações entre objetos.
- Finalize: Executa operações de limpeza antes que um objeto seja recuperado automaticamente.
- GetHashCode: Gera um número correspondente ao valor do objeto para suportar o uso de uma tabela de hash.
- ToString: Fabrica uma cadeia de caracteres de texto legível por humanos que descreve uma instância da classe.
As linguagens normalmente não exigem que uma classe declare herança de Object porque a herança está implícita.
Considerações sobre desempenho
Se você estiver criando uma classe, como uma coleção, que deve manipular qualquer tipo de objeto, poderá criar membros de classe que aceitem instâncias da Object classe. No entanto, o processo de boxe e unboxing de um tipo tem um custo de desempenho. Se você sabe que sua nova classe lidará frequentemente com certos tipos de valor, você pode usar uma das duas táticas para minimizar o custo do boxe.
- Crie um método geral que aceite um Object tipo e um conjunto de sobrecargas de método específicas do tipo que aceitem cada tipo de valor que você espera que sua classe manipule com freqüência. Se existir um método específico para o tipo que aceite o tipo de parâmetro de chamada, não ocorrerá boxing e o método específico para o tipo será invocado. Se não houver nenhum argumento de método que corresponda ao tipo de parâmetro de chamada, o parâmetro será colocado em caixa e o método geral será invocado.
- Projete seu tipo e seus membros para usar genéricos. O common language runtime cria um tipo genérico fechado quando você cria uma instância de sua classe e especifica um argumento de tipo genérico. O método genérico é específico do tipo e pode ser invocado sem encaixotar o parâmetro de chamada.
Embora às vezes seja necessário desenvolver classes de uso geral que aceitam e retornam Object tipos, você pode melhorar o desempenho fornecendo também uma classe específica de tipo para lidar com um tipo usado com freqüência. Por exemplo, fornecer uma classe específica para definir e obter valores Booleanos elimina o custo de encaixotamento e desencaixotamento de valores Booleanos.
Construtores
| Name | Descrição |
|---|---|
| Object() |
Inicializa uma nova instância da Object classe. |
Métodos
| Name | Descrição |
|---|---|
| Equals(Object, Object) |
Determina se as instâncias de objeto especificadas são consideradas iguais. |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. |
| Finalize() |
Permite que um objeto tente libertar recursos e realizar outras operações de limpeza antes de ser recuperado pela recolha de lixo. |
| GetHashCode() |
Serve como função de hash predefinida. |
| GetType() |
Obtém o Type da instância atual. |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. |
| ReferenceEquals(Object, Object) |
Determina se as instâncias especificadas Object são a mesma instância. |
| ToString() |
Devolve uma cadeia que representa o objeto atual. |
Aplica-se a
Segurança de Thread
Os membros estáticos públicos (Shared em Visual Basic) deste tipo são seguros para threads. Os membros da instância não têm garantia de serem seguros para threads.