Object 클래스
정의
.NET 클래스 계층 구조의 모든 클래스를 지원하며 파생 클래스에 하위 수준 서비스를 제공합니다.Supports all classes in the .NET class hierarchy and provides low-level services to derived classes. 이는 모든 .NET 클래스의 궁극적인 기본 클래스이며 형식 계층 구조의 루트입니다.This is the ultimate base class of all .NET classes; it is the root of the type hierarchy.
public ref class Object
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.AutoDual)]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class Object
type obj = class
Public Class Object
- 특성
예제
다음 예제에서 파생 되는 지점 형식 정의 Object 클래스 및 대부분의 가상 메서드를 재정의 합니다 Object 클래스입니다.The following example defines a Point type derived from the Object class and overrides many of the virtual methods of the Object class. 또한 예제에서는를 호출 하는 다양 한 정적 메서드와 인스턴스는 Object 클래스.In addition, the example shows how to call many of the static and instance methods of the Object class.
using namespace System;
// The Point class is derived from System.Object.
ref class Point
{
public:
int x;
public:
int y;
public:
Point(int x, int y)
{
this->x = x;
this->y = y;
}
public:
virtual bool Equals(Object^ obj) override
{
// 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.
Point^ other = (Point^) obj;
return (this->x == other->x) && (this->y == other->y);
}
// Return the XOR of the x and y fields.
public:
virtual int GetHashCode() override
{
return x ^ y;
}
// Return the point's value as a string.
public:
virtual String^ ToString() override
{
return String::Format("({0}, {1})", x, y);
}
// Return a copy of this point object by making a simple
// field copy.
public:
Point^ Copy()
{
return (Point^) this->MemberwiseClone();
}
};
int main()
{
// Construct a Point object.
Point^ p1 = gcnew Point(1, 2);
// Make another Point object that is a copy of the first.
Point^ p2 = p1->Copy();
// Make another variable that references the first
// Point object.
Point^ 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: {0}", p1->ToString());
}
// This code produces the following output.
//
// False
// True
// True
// p1's value is: (1, 2)
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)
//
' 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)
'
설명
언어에서 상속을 선언 하는 클래스를 일반적으로 필요 하지 않습니다 Object 상속은 암시적 때문입니다.Languages typically do not require a class to declare inheritance from Object because the inheritance is implicit.
.NET의 모든 클래스는 Object에서 파생 되기 때문에 Object 클래스에 정의 된 모든 메서드는 시스템의 모든 개체에서 사용할 수 있습니다.Because all classes in .NET are derived from Object, every method defined in the Object class is available in all objects in the system. 파생 클래스 수 및 포함 하 여 이러한 메서드의 일부를 재정의 하는:Derived classes can and do override some of these methods, including:
Equals -개체 간의 비교를 지원합니다.Equals - Supports comparisons between objects.
Finalize -개체를 자동으로 회수 하기 전에 정리 작업을 수행 합니다.Finalize - Performs cleanup operations before an object is automatically reclaimed.
GetHashCode -해시 테이블의 사용을 지원 하려면 개체의 값에 해당 하는 숫자를 생성 합니다.GetHashCode - Generates a number corresponding to the value of the object to support the use of a hash table.
ToString -클래스의 인스턴스를 설명 하는 사람이 읽을 수 있는 텍스트 문자열을 만듭니다.ToString - Manufactures a human-readable text string that describes an instance of the class.
성능 고려 사항Performance Considerations
인스턴스를 허용 하는 클래스 멤버를 만들 수 같은 모든 형식의 개체를 처리 해야 하는 컬렉션 클래스를 디자인 하는 경우는 Object 클래스입니다.If you are designing a class, such as a collection, that must handle any type of object, you can create class members that accept instances of the Object class. 그러나 프로세스를 boxing 및 unboxing 형식 성능 비용을 전달 합니다.However, the process of boxing and unboxing a type carries a performance cost. 새 클래스를 특정 값 형식을 처리할 자주 알고 있는 경우 boxing 비용을 최소화 하려면 두 가지 방법 중 하나를 사용할 수 있습니다.If you know your new class will frequently handle certain value types you can use one of two tactics to minimize the cost of boxing.
허용 하는 일반 메서드는 Object 형식 및 각 값 형식에서 자주 처리 클래스를 허용 하는 형식별 메서드 오버 로드 집합.Create a general method that accepts an Object type, and a set of type-specific method overloads that accept each value type you expect your class to frequently handle. 호출 매개 변수 형식을 허용 하는 형식별 메서드 있으면 boxing 되지 않습니다 발생 하 고 형식별 메서드를 호출 합니다.If a type-specific method exists that accepts the calling parameter type, no boxing occurs and the type-specific method is invoked. 호출 매개 변수 형식과 일치 하는 메서드 인수가 있으면 매개 변수는 boxed 및 일반 메서드가 호출 됩니다.If there is no method argument that matches the calling parameter type, the parameter is boxed and the general method is invoked.
제네릭을 사용 하 여 형식 및 해당 멤버를 디자인 합니다.Design your type and its members to use generics. 공용 언어 런타임 클래스의 인스턴스를 만들고 제네릭 형식 인수를 지정할 때 닫힌된 제네릭 형식을 만듭니다.The common language runtime creates a closed generic type when you create an instance of your class and specify a generic type argument. 제네릭 메서드의 형식 특정 이며 호출 매개 변수를 boxing 하지 않고 호출할 수 있습니다.The generic method is type-specific and can be invoked without boxing the calling parameter.
받아들이거나 반환 하는 범용 클래스를 개발 해야 하는 경우도 있지만 Object 형식에도 자주 사용 되는 형식을 처리 하는 type 별 클래스를 제공 하 여 성능을 개선할 수 있습니다.Although it is sometimes necessary to develop general purpose classes that accept and return Object types, you can improve performance by also providing a type-specific class to handle a frequently used type. 예를 들어, 설정 및 부울 값을 가져오고이에 관련 된 클래스를 제공 비용 boxing 및 unboxing 부울 값을 제거 합니다.For example, providing a class that is specific to setting and getting Boolean values eliminates the cost of boxing and unboxing Boolean values.
생성자
Object() |
Object 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the Object class. |
메서드
Equals(Object) |
지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object. |
Equals(Object, Object) |
지정한 개체 인스턴스가 동일한지를 확인합니다.Determines whether the specified object instances are considered equal. |
Finalize() |
가비지 컬렉션이 회수하기 전에 개체가 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다.Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. |
GetHashCode() |
기본 해시 함수로 작동합니다.Serves as the default hash function. |
GetType() | |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object. |
ReferenceEquals(Object, Object) |
지정한 Object 인스턴스가 동일한지 여부를 확인합니다.Determines whether the specified Object instances are the same instance. |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object. |
적용 대상
스레드 보안
공용 정적 (Shared
Visual Basic의)이 형식의 멤버는 스레드로부터 안전 합니다.Public static (Shared
in Visual Basic) members of this type are thread safe. 인스턴스 멤버는 스레드로부터 안전 하 보장 되지 않습니다.Instance members are not guaranteed to be thread-safe.