Object Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Ondersteunt alle klassen in de .NET klassehiërarchie en biedt services op laag niveau aan afgeleide klassen. Dit is de ultieme basisklasse van alle .NET klassen; het is de hoofdmap van de typehiërarchie.
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
- Kenmerken
Voorbeelden
In het volgende voorbeeld wordt een punttype gedefinieerd dat is afgeleid van de Object klasse en worden veel van de virtuele methoden van de Object klasse overschreven. Daarnaast ziet u in het voorbeeld hoe u veel van de statische en instantiemethoden van de Object klasse aanroept.
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)
'
Opmerkingen
De Object klasse is de ultieme basisklasse van alle .NET-klassen; het is de wortel van de typehiërarchie.
Omdat alle klassen in .NET zijn afgeleid van Object, is elke methode die in de Object klasse is gedefinieerd, beschikbaar in alle objecten in het systeem. Afgeleide klassen kunnen een aantal van deze methoden overschrijven, waaronder:
- Equals: ondersteunt vergelijkingen tussen objecten.
- Finalize: Voert opschoonbewerkingen uit voordat een object automatisch wordt vrijgemaakt.
- GetHashCode: Genereert een getal dat overeenkomt met de waarde van het object ter ondersteuning van het gebruik van een hash-tabel.
- ToString: Maakt een voor mensen leesbare tekenreeks die een instantie van de klasse beschrijft.
Talen vereisen doorgaans geen klasse om overname van Object te declareren omdat de overname impliciet is.
Prestatie-overwegingen
Als u een klasse, zoals een verzameling, ontwerpt die elk type object moet verwerken, kunt u klasseleden maken die exemplaren van de Object klasse accepteren. Het proces van het boksen en uitpakken van een type brengt echter prestatiekosten met zich mee. Als u weet dat uw nieuwe klasse vaak bepaalde waardetypen afhandelt, kunt u een van de twee tactieken gebruiken om de kosten van boksen te minimaliseren.
- Maak een algemene methode die een Object type accepteert en een set typespecifieke methodeoverbelastingen die elk waardetype accepteren dat u verwacht dat uw klasse regelmatig wordt verwerkt. Als er een typespecifieke methode bestaat die het type van de aanroepende parameter accepteert, vindt er geen boxing plaats en wordt de typespecifieke methode aangeroepen. Als er geen methodeargument is dat overeenkomt met het type van de oproepparameter, wordt de parameter geboxed en wordt de algemene methode aangeroepen.
- Ontwerp uw type en de leden ervan om generieken te gebruiken. De algemene taalruntime maakt een gesloten algemeen type wanneer u een exemplaar van uw klasse maakt en een algemeen typeargument opgeeft. De algemene methode is typespecifiek en kan worden aangeroepen zonder de aanroepende parameter te boksen.
Hoewel het soms nodig is om klassen voor algemeen gebruik te ontwikkelen die typen accepteren en retourneren Object , kunt u de prestaties verbeteren door ook een typespecifieke klasse te bieden voor het afhandelen van een veelgebruikt type. Als u bijvoorbeeld een klasse biedt die specifiek is voor het instellen en ophalen van booleaanse waarden, worden de kosten van het wrappen en uitpakken van deze waarden geëlimineerd.
Constructors
| Name | Description |
|---|---|
| Object() |
Initialiseert een nieuw exemplaar van de Object klasse. |
Methoden
| Name | Description |
|---|---|
| Equals(Object, Object) |
Bepaalt of de opgegeven objectexemplaren als gelijk worden beschouwd. |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. |
| Finalize() |
Hiermee kan een object resources vrijmaken en andere opschoonbewerkingen uitvoeren voordat het wordt vrijgemaakt door garbagecollection. |
| GetHashCode() |
Fungeert als de standaardhashfunctie. |
| GetType() |
Hiermee haalt u de Type huidige instantie op. |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. |
| ReferenceEquals(Object, Object) |
Bepaalt of de opgegeven Object exemplaren hetzelfde exemplaar zijn. |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. |
Van toepassing op
Veiligheid thread
Openbare statische (Shared in Visual Basic) leden van dit type zijn thread-veilig. Exemplaarleden zijn niet gegarandeerd thread-safe.