Object Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Támogatja a .NET osztályhierarchiában lévő összes osztályt, és alacsony szintű szolgáltatásokat biztosít a származtatott osztályok számára. Ez az összes .NET osztály végső alaposztálya; ez a típushierarchia gyökere.
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
- Attribútumok
Példák
Az alábbi példa az osztályból Object származtatott ponttípust határoz meg, és felülbírálja az Object osztály számos virtuális metódusát. A példa emellett azt is bemutatja, hogyan hívhatja meg az osztály számos statikus és példány metódusát Object .
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)
'
Megjegyzések
Az Object osztály az összes .NET-osztály végső alaposztálya; ez a típushierarchia gyökere.
Mivel a .NET-ben minden osztály származik Object, az Object osztályban definiált összes metódus elérhető a rendszer összes objektumában. A származtatott osztályok felülbírálhatják az alábbi metódusok némelyikét, például:
- Equals: Támogatja az objektumok összehasonlítását.
- Finalize: Tisztítási műveleteket hajt végre az objektumok automatikus visszanyerése előtt.
- GetHashCode: Létrehoz egy számot, amely az objektum értékének felel meg, hogy támogassa a kivonattábla használatát.
- ToString: Egy emberi olvasásra alkalmas szöveget hoz létre, amely az osztály egy példányát írja le.
A nyelvek általában nem igényelnek osztályt az öröklés Object deklarálásához, mivel az öröklés implicit.
Teljesítménnyel kapcsolatos szempontok
Ha olyan osztályt tervez, például gyűjteményt, amely bármilyen típusú objektumot kezel, létrehozhat olyan osztálytagokat, amelyek elfogadják az Object osztálypéldányokat. Egy típus dobozolásának és kicsomagolásának folyamata azonban teljesítményköltséggel jár. Ha tudja, hogy az új osztály gyakran fog kezelni bizonyos értéktípusokat, két taktikával csökkentheti a boxolás költségeit.
- Hozzon létre egy általános metódust, amely elfogadja a típust Object , és olyan típusspecifikus metódusok készletét, amelyek elfogadják az osztály által gyakran kezelni kívánt értéktípusokat. Ha létezik olyan típusspecifikus metódus, amely elfogadja a hívási paraméter típusát, nem történik dobozolás, és a típusspecifikus metódus meghívása megtörténik. Ha nincs olyan metódusargumentum, amely megfelel a hívóparaméter típusának, a paraméter be van jelölve, és az általános metódus meghívása történik.
- A típust és annak tagjait úgy tervezheti meg, hogy általánosakat használjon. A közös nyelvi futtatókörnyezet egy zárt általános típust hoz létre az osztály egy példányának létrehozásakor, és általános típusargumentumot ad meg. Az általános metódus típusspecifikus, és a hívó paraméter megadása nélkül hívható meg.
Bár néha szükség van általános célú osztályok fejlesztésére, amelyek elfogadják és visszaadják Object a típusokat, javíthatja a teljesítményt azáltal, hogy egy típusspecifikus osztályt is biztosít a gyakran használt típus kezeléséhez. Ha például egy logikai értékek beállítására és lekérésére vonatkozó osztályt ad meg, azzal kiküszöböli a logikai értékek dobozolásának és kicsomagolásának költségeit.
Konstruktorok
| Name | Description |
|---|---|
| Object() |
Inicializálja a Object osztály új példányát. |
Metódusok
| Name | Description |
|---|---|
| Equals(Object, Object) |
Meghatározza, hogy a megadott objektumpéldányok egyenlőnek minősülnek-e. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. |
| Finalize() |
Lehetővé teszi az objektumok számára, hogy megpróbálják felszabadítani az erőforrásokat, és más tisztítási műveleteket hajtsanak végre, mielőtt a szemétgyűjtés visszanyeri azt. |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. |
| GetType() |
Lekéri az Type aktuális példányt. |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. |
| ReferenceEquals(Object, Object) |
Meghatározza, hogy a megadott Object példányok megegyeznek-e. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. |
A következőre érvényes:
Szálbiztonság
A nyilvános statikus (Shared Visual Basic) ilyen típusú tagjai szálbiztosak. A példánytagok nem garantáltan szálbiztosak.