System.Object 类

方法描述

支持 .NET Framework 类层次结构中的所有类,并为派生类提供低级别服务。 这是 .NET Framework 中所有类的最终基类;它是类型层次结构的根。

语法定义(C# System.Object 类 的用法)

[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
[ComVisibleAttribute(true)]
public class Object

构造函数

构造函数名称 构造函数描述
Object 初始化 Object 类的新实例。

成员/方法

方法名称 方法描述
Equals(Object) 确定指定的 Object 是否等于当前的 Object。
Equals(Object, Object) 确定指定的对象实例是否被视为相等。
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。
GetHashCode 用作特定类型的哈希函数。
GetType 获取当前实例的 Type。
MemberwiseClone 创建当前 Object 的浅表副本。
ReferenceEquals 确定指定的 Object 实例是否是相同的实例。
ToString 返回表示当前对象的字符串。

提示和注释

语言通常不要求类声明从 Object 的继承,因为继承是隐式的。

因为 .NET Framework 中的所有类均从 Object 派生,所以 Object 类中定义的每个方法可用于系统中的所有对象。 派生类可以而且确实重写这些方法中的某些,其中包括:

Equals — 支持对象间的比较。

Finalize — 在自动回收对象之前执行清理操作。

GetHashCode — 生成一个与对象的值相对应的数字以支持哈希表的使用。

ToString — 生成描述类的实例的可读文本字符串。

性能注意事项

如果要设计的类(如集合)必须处理所有类型的对象,则可以创建接受 Object 类的实例的类成员。 但是,对类型进行装箱和取消装箱的过程会增加性能开销。 如果知道新类将频繁处理某些值类型,则可以使用下列两种策略之一,以使装箱开销减至最少。

一种策略是创建一个一般方法和一组类型特定的重载方法;一般方法接受 Object 类型,重载方法接受类预期要频繁处理的所有值类型。 如果某个类型特定的方法可接受调用参数类型,调用该类型特定的方法时则无需进行装箱。 如果调用参数类型与方法参数都不匹配,则对该参数进行装箱并调用一般方法。

另一种策略是将类及其方法设计为使用泛型。 在创建类的实例并指定一个泛型类型参数时,公共语言运行时创建一个封闭泛型类型。 泛型方法是类型特定的,无需对调用参数进行装箱即可调用。

虽然有时必须开发可接受并返回 Object 类型的通用类,但也可以提供特定于类型的类来处理常用类型,从而提高性能。 例如,通过提供特定于设置和获取布尔值的类,可以减少对布尔值进行装箱和取消装箱所需的开销。

System.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.
        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)
//

继承层次结构

System.Object

所有类、结构、枚举和委托。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

线程安全

此类型的公共静态(在 Visual Basic 中为 Shared)成员是线程安全的。 不能保证实例成员是线程安全的。

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1 受以下版本支持:

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。

相关资源

System 命名空间
MSDN