导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Object 类

2013/12/13

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

System.Object
  所有类、结构、枚举以及委托。

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)

public class Object

Object 类型公开以下成员。

  名称说明
公共方法Object初始化 Object 类的新实例。
返回顶部

  名称说明
公共方法Equals(Object)确定指定的 Object 是否等于当前的 Object
公共方法静态成员Equals(Object, Object)确定指定的对象实例是否被视为相等。
受保护的方法Finalize允许 Object 在垃圾回收器回收该对象之前尝试释放资源并执行其他清理操作。
公共方法GetHashCode用作特定类型的哈希函数。
公共方法GetType获取当前实例的 Type
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。
公共方法静态成员ReferenceEquals确定指定的对象实例是否为相同的实例。
公共方法ToString返回一个字符串,它表示当前的对象。
返回顶部

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

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

  • Equals — 支持对象间的比较。

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

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

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

性能注意事项

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

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

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

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

下面的示例定义一个派生自 Object 类的 Point 类型,然后重写 Object 类的很多虚方法。此外,该示例还演示如何调用 Object 类的很多静态方法和实例方法。

说明注意:

有关如何编译和运行此示例代码的信息,请参见生成具有静态 Windows Phone TextBlock 控件的示例


// 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 Example
{
    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
    {
        // 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.
        outputBlock.Text += Object.ReferenceEquals(p1, p2).ToString() + "\n";

        // The line below displays true because p1 and p2
        // refer to two different objects that have the same value.
        outputBlock.Text += Object.Equals(p1, p2).ToString() + "\n";

        // The line below displays true because p1 and p3 refer to one object.
        outputBlock.Text += Object.ReferenceEquals(p1, p3).ToString() + "\n";

        // The line below displays: p1's value is: (1, 2)
        outputBlock.Text += String.Format("p1's value is: {0}", p1.ToString()) + "\n";
    }
}

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


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

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

显示:
© 2014 Microsoft