Click to Rate and Give Feedback
MSDN
MSDN Library
.NET Development
.NET Framework 3.5
System Namespace
Object Class
This page is specific to
Microsoft Visual Studio 2008/.NET Framework 3.5

Other versions are also available for the following:
.NET Framework Class Library
Object Class

Updated: November 2007

Supports all classes in the .NET Framework class hierarchy and provides low-level services to derived classes. This is the ultimate base class of all classes in the .NET Framework; it is the root of the type hierarchy.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

Visual Basic (Declaration)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.AutoDual)> _
Public Class Object
Visual Basic (Usage)
Dim instance As Object
C#
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
public class Object
Visual C++
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType::AutoDual)]
public ref class Object
J#
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.AutoDual) */
public class Object
JScript
public class Object

Languages typically do not require a class to declare inheritance from Object because the inheritance is implicit.

Because all classes in the .NET Framework 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 - Supports comparisons between objects.

  • Finalize - Performs cleanup operations before an object is automatically reclaimed.

  • GetHashCode - Generates a number corresponding to the value of the object to support the use of a hash table.

  • ToString - Manufactures a human-readable text string that describes an instance of the class.

Performance Considerations

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. However, the process of boxing and unboxing a type carries a performance cost. 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.

  • One tactic is to 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. If a type-specific method exists that accepts the calling parameter type, no boxing occurs and the type-specific method is invoked. If there is no method argument that matches the calling parameter type, the parameter is boxed and the general method is invoked.

  • The other tactic is to design your class and its methods 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. The generic method is type-specific and can be invoked without boxing the calling parameter.

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. For example, providing a class that is specific to setting and getting Boolean values eliminates the cost of boxing and unboxing Boolean values.

The following example defines a Point type derived from the Object class and overrides many of the virtual methods of the Object class. In addition, the example shows how to call many of the static and instance methods of the Object class.

Visual Basic
Imports System

' 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 'New

    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 'Equals

    ' Return the XOR of the x and y fields.
    Public Overrides Function GetHashCode() As Integer 
        Return x ^ y
    End Function 'GetHashCode

    ' Return the point's value as a string.
    Public Overrides Function ToString() As String 
        Return String.Format("({0}, {1})", x, y)
    End Function 'ToString

    ' 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 'Copy
End Class 'Point 

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: {0}", p1.ToString())

    End Sub 'Main 
End Class 'App

' This code example produces the following output:
'
' False
' True
' True
' p1's value is: (1, 2)
'

C#
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.
        Point 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 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();
    }
}

public sealed class App {
    static void Main() 
    {
        // Construct a Point object.
        Point p1 = new 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 example produces the following output:
//
// False
// True
// True
// p1's value is: (1, 2)
//

Visual C++
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)

System..::.Object
  Accessibility..::.CAccPropServicesClass
  Microsoft.Aspnet.Snapin..::.AspNetManagementUtility
  Microsoft.Build.BuildEngine..::.BuildItem
  Microsoft.Build.BuildEngine..::.BuildItemGroup
  Microsoft.Build.BuildEngine..::.BuildItemGroupCollection
  Microsoft.Build.BuildEngine..::.BuildProperty
  Microsoft.Build.BuildEngine..::.BuildPropertyGroup
  Microsoft.Build.BuildEngine..::.BuildPropertyGroupCollection
  Microsoft.Build.BuildEngine..::.BuildTask
  Microsoft.Build.BuildEngine..::.ConfigurableForwardingLogger
  Microsoft.Build.BuildEngine..::.ConsoleLogger
  Microsoft.Build.BuildEngine..::.DistributedFileLogger
  Microsoft.Build.BuildEngine..::.Engine
  Microsoft.Build.BuildEngine..::.Import
  Microsoft.Build.BuildEngine..::.ImportCollection
  Microsoft.Build.BuildEngine..::.LoggerDescription
  Microsoft.Build.BuildEngine..::.Project
  Microsoft.Build.BuildEngine..::.Target
  Microsoft.Build.BuildEngine..::.TargetCollection
  Microsoft.Build.BuildEngine..::.Toolset
  Microsoft.Build.BuildEngine..::.ToolsetCollection
  Microsoft.Build.BuildEngine..::.UsingTask
  Microsoft.Build.BuildEngine..::.UsingTaskCollection
  Microsoft.Build.BuildEngine..::.Utilities
  Microsoft.Build.Conversion..::.ProjectFileConverter
  Microsoft.Build.Framework..::.BuildEventContext
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.BootstrapperBuilder
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.BootstrapperBuilder
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.BuildMessage
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.BuildMessage
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.BuildResults
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.BuildResults
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.BuildSettings
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.BuildSettings
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.Product
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.Product
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.ProductBuilder
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.ProductBuilder
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.ProductBuilderCollection
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.ProductBuilderCollection
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.ProductCollection
  Microsoft.Build.Tasks.Deployment.Bootstrapper..::.ProductCollection
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.ApplicationIdentity
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.ApplicationIdentity
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.AssemblyIdentity
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.AssemblyIdentity
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.AssemblyReferenceCollection
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.AssemblyReferenceCollection
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.BaseReference
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.BaseReference
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.ComClass
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.ComClass
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.FileReferenceCollection
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.FileReferenceCollection
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.Manifest
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.Manifest
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.ManifestReader
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.ManifestReader
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.ManifestWriter
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.ManifestWriter
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.OutputMessage
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.OutputMessage
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.OutputMessageCollection
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.OutputMessageCollection
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.ProxyStub
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.ProxyStub
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.SecurityUtilities
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.SecurityUtilities
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.TrustInfo
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.TrustInfo
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.TypeLib
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.TypeLib
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.WindowClass
  Microsoft.Build.Tasks.Deployment.ManifestUtilities..::.WindowClass
  Microsoft.Build.Utilities..::.CommandLineBuilder
  Microsoft.Build.Utilities..::.CommandLineBuilder
  Microsoft.Build.Utilities..::.Logger
  Microsoft.Build.Utilities..::.Logger
  Microsoft.Build.Utilities..::.ProcessorArchitecture
  Microsoft.Build.Utilities..::.Task
  Microsoft.Build.Utilities..::.Task
  Microsoft.Build.Utilities..::.ToolLocationHelper
  Microsoft.Build.Utilities..::.ToolLocationHelper
  Microsoft.CSharp..::.Compiler
  Microsoft.CSharp..::.CompilerError
  Microsoft.IE..::.IHostStubClass
  Microsoft.IE..::.Manager
  Microsoft.IE..::.SecureFactory
  Microsoft.JScript..::.AST
  Microsoft.JScript..::.CmdLineOptionParser
  Microsoft.JScript..::.Context
  Microsoft.JScript..::.Convert
  Microsoft.JScript..::.DebugConvert
  Microsoft.JScript..::.DocumentContext
  Microsoft.JScript..::.DynamicFieldInfo
  Microsoft.JScript..::.Empty
  Microsoft.JScript..::.FieldAccessor
  Microsoft.JScript..::.GlobalObject
  Microsoft.JScript..::.Globals
  Microsoft.JScript..::.JSAuthor
  Microsoft.JScript..::.JSParser
  Microsoft.JScript..::.JSScanner
  Microsoft.JScript..::.LateBinding
  Microsoft.JScript..::.MemberInfoList
  Microsoft.JScript..::.MethodInvoker
  Microsoft.JScript..::.Missing
  Microsoft.JScript..::.Namespace
  Microsoft.JScript..::.Runtime
  Microsoft.JScript..::.ScriptObject
  Microsoft.JScript..::.ScriptStream
  Microsoft.JScript..::.SimpleHashtable
  Microsoft.JScript..::.SuperTypeMembersSorter
  Microsoft.JScript..::.TypedArray
  Microsoft.JScript.Vsa..::.ResInfo
  Microsoft.JScript..::.VsaItem
  Microsoft.JScript..::.VsaItems
  Microsoft.ManagementConsole..::.ActionsPaneItem
  Microsoft.ManagementConsole.Advanced..::.Console
  Microsoft.ManagementConsole.Advanced..::.MessageBoxParameters
  Microsoft.ManagementConsole.Advanced..::.PrimaryScopeNode
  Microsoft.ManagementConsole.Advanced..::.WaitCursor
  Microsoft.ManagementConsole.Internal..::.ActionsPaneItemData
  Microsoft.ManagementConsole.Internal..::.ColumnData
  Microsoft.ManagementConsole.Internal..::.Command
  Microsoft.ManagementConsole.Internal..::.CommandResult
  Microsoft.ManagementConsole.Internal..::.GlobalConfiguration
  Microsoft.ManagementConsole.Internal..::.GlobalConfiguration..::.SnapInHostingOptions
  Microsoft.ManagementConsole.Internal..::.InsertScopeNodesCommandReader
  Microsoft.ManagementConsole.Internal..::.InsertScopeNodesCommandWriter
  Microsoft.ManagementConsole.Internal..::.NodeData
  Microsoft.ManagementConsole.Internal..::.NodeIdData
  Microsoft.ManagementConsole.Internal..::.NodeSubItemData
  Microsoft.ManagementConsole.Internal..::.NodeType
  Microsoft.ManagementConsole.Internal..::.Notification
  Microsoft.ManagementConsole.Internal..::.PasteTargetInfo
  Microsoft.ManagementConsole.Internal..::.PropertyPageInfo
  Microsoft.ManagementConsole.Internal..::.RequestInfo
  Microsoft.ManagementConsole.Internal..::.RequestResponse
  Microsoft.ManagementConsole.Internal..::.SerializableImageListWrapper
  Microsoft.ManagementConsole.Internal..::.SharedDataObjectUpdate
  Microsoft.ManagementConsole.Internal..::.SnapInData
  Microsoft.ManagementConsole.Internal..::.SnapInRegistrationInfo
  Microsoft.ManagementConsole.Internal..::.TraceUtility
  Microsoft.ManagementConsole.Internal..::.ViewDescriptionData
  Microsoft.ManagementConsole.Internal..::.ViewSetData
  Microsoft.ManagementConsole..::.MmcListViewColumn
  Microsoft.ManagementConsole..::.Node
  Microsoft.ManagementConsole..::.NodeId
  Microsoft.ManagementConsole..::.PropertyPage
  Microsoft.ManagementConsole..::.PropertySheet
  Microsoft.ManagementConsole..::.SelectedNodeCollection
  Microsoft.ManagementConsole..::.SelectionData
  Microsoft.ManagementConsole..::.SharedData
  Microsoft.ManagementConsole..::.SharedDataItemBase
  Microsoft.ManagementConsole..::.SnapInBase
  Microsoft.ManagementConsole..::.SnapInImageList