Object クラス

定義

.NET クラス階層のすべてのクラスをサポートし、派生クラスに下位レベルのサービスを提供します。 これは、全 .NET クラスの基本クラスであり、型階層のルートです。

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
属性

次の例では、 クラスから派生した Point 型を定義し、 クラスの仮想メソッドの多 Object くをオーバーライド Object します。 さらに、この例では、 クラスの静的メソッドとインスタンス メソッドの多くを呼び出す方法を示 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)
//
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)
' 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 は必要ではありません。

.NET のすべてのクラスは から派生します。このクラスで定義されているメソッドはすべて、システム内のすべての Object Object オブジェクトで使用できます。 派生クラスは、次を含む、これらのメソッドの一部をオーバーライドできます。

  • Equals - オブジェクト間の比較をサポートします。

  • Finalize - オブジェクトが自動的に再利用される前にクリーンアップ操作を実行します。

  • GetHashCode - ハッシュ テーブルの使用をサポートする オブジェクトの値に対応する数値を生成します。

  • ToString - クラスのインスタンスを記述する人間が読み取り可能なテキスト文字列を製造します。

パフォーマンスに関する考慮事項

任意の型のオブジェクトを処理する必要があるコレクションなどのクラスを設計する場合は、クラスのインスタンスを受け入れるクラス メンバーを作成 Object できます。 ただし、型のボックス化とボックス化解除のプロセスには、パフォーマンス コストがかかります。 新しいクラスが特定の値型を頻繁に処理する場合は、2 つの方法のいずれかを使用して、ボックス化のコストを最小限に抑えてください。

  • 型を受け入れる一般的なメソッドと、クラスが頻繁に処理する必要がある各値型を受け入れる一連の型固有のメソッド オーバーロード Object を作成します。 呼び出し元のパラメーター型を受け取る型固有のメソッドが存在する場合、ボックス化は行われません。型固有のメソッドが呼び出されます。 呼び出し元のパラメーター型に一致するメソッド引数がない場合、パラメーターはボックス化され、一般的なメソッドが呼び出されます。

  • ジェネリックを使用する型とそのメンバーを設計します。 共通言語ランタイムは、クラスのインスタンスを作成し、ジェネリック型引数を指定するときに、閉じたジェネリック型を作成します。 ジェネリック メソッドは型固有であり、呼び出し元のパラメーターをボックス化せずに呼び出すことができます。

型を受け入れて返す汎用クラスを開発する必要がある場合は、頻繁に使用される型を処理する型固有のクラスも提供することで、パフォーマンス Object を向上させることができます。 たとえば、ブール値の設定と取得に固有のクラスを指定すると、ブール値のボックス化とボックス化解除のコストが削減されます。

コンストラクター

Object()

Object クラスの新しいインスタンスを初期化します。

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

Equals(Object, Object)

指定されたインスタンスが等しいかどうかを判断します。

Finalize()

オブジェクトが、ガベージ コレクションによって収集される前に、リソースの解放とその他のクリーンアップ操作の実行を試みることができるようにします。

GetHashCode()

既定のハッシュ関数として機能します。

GetType()

現在のインスタンスの Type を取得します。

MemberwiseClone()

現在の Object の簡易コピーを作成します。

ReferenceEquals(Object, Object)

指定した複数の Object インスタンスが同一インスタンスかどうかを判断します。

ToString()

現在のオブジェクトを表す文字列を返します。

適用対象

スレッド セーフ

パブリック静的 (Visual Basic ではShared) なこの型のメンバーはスレッド セーフです インスタンス メンバーは、スレッド セーフである保証はありません。