在C#中,System.Object是所有类型的基类。所有类型,无论是值类型还是引用类型,都是从System.Object类中派生的。
System.Object类提供了一些基本的方法,如ToString(),Equals(),GetHashCode()等等。
例如,使用System.Object的Equals()方法来比较两个对象是否相等:
object obj1 = new object();
object obj2 = new object();
bool areEqual = obj1.Equals(obj2); // 这将返回false,因为两个对象实例不同
完整示例代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DelegateUse2
{
internal class Program
{
static void Main(string[] args)
{
object obj1 = new object();
object obj2 = new object();
bool areEqual = obj1.Equals(obj2); // 这将返回false,因为两个对象实例不同
Console.WriteLine(areEqual);
}
}
}
同样,我们可以使用ToString()方法来获取对象的字符串表示:
object obj = new object();
string str = obj.ToString(); // 这将返回对象的类型名称,如"System.Object"
完整示例代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DelegateUse2
{
internal class Program
{
static void Main(string[] args)
{
object obj = new object();
string str = obj.ToString(); // 这将返回对象的类型名称,如"System.Object"
Console.WriteLine(str);
}
}
}
此外,System.Object还定义了一个Finalize()方法(终结者),该方法在垃圾收集器准备回收对象时被调用。这允许你执行任何必要的清理工作,如释放未管理的资源。但是,大多数情况下,不需要重写这个方法,因为C#具有自动垃圾收集和析构函数(finalizers)机制。
System.Object 包含的方法
方法 | 返回类型 | 虚拟 | 静态 | 说明 |
Object() | N/A | 无 | 无 | System.Object 类型的构造函数,由派生类型的构造函数自动调用 |
~Object()(也称为Finalize() | N/A | 无 | 无 | System.Object类型的析构函数,由派生类型的析构函数自动调用,不能手动调用 |
Equals(object) | bool | 有 | 无 | 把调用该方法的对象与另一个对象相比,如果它们相等,就返回 true。默认的实现代码会查看其对象参数是否引用了同一个对象(因为对象是引用类型)。如果想以不同方式来比较对象,则可以重写该方法,例如,比较两个对象的状态。 |
Equlas(object,object) | bool | 无 | 有 | 这个方法比较传送给它的两个对象,看看它们是否相等。检查时使用了 Equals(object) 方法。注意 ??,如果两个对象都是空引用,这个方法就返回 true。 |
ReferenceEquals | bool | 无 | 有 | 这个方法比较传送给它的两个对象,看看它们是不是同一个实例的引用。 |
ToString() | String | 有 | 无 | 返回一个对应于对象实例的字符串。默认情况下,这是一个类类型的限定名称,但可以重写它,给类类型提供合适的实现方式。 |
MemberwiseClone() | object | 无 | 无 | 通过创建一个新对象实例并复制成员,以复制该对象。成员复制不会得到这些成员的新实例。新对象的任何引用类型成员都将引用与源类相同的对象,这个方法是受保护的,所以只能在类或派生的类中使用。 |
GetType() | System.Type | 无 | 无 | 以 System.Type 对象的形式返回对象的类型。 |
GetHashCode() | int | 有 | 无 | 在需要此参数的地方,用作对象的散列函数,它返回一个以压缩形式表示的对象状态的值。 |
这些方法是.NET Framework 中对象类型必须支持的基本用法,但我们可能从不使用其中某些类型(或者只在特殊情况下使用,如 GetHashCode())
??在利用多态性时,GetType() 是一个有用的方法,允许根据对象的类型来执行不同的操作,而不是像通常那样,对所有对象都执行相同的操作。例如,如果函数接受一个 object 类型的参数(表示可以给该函数传递任何信息),就可以在遇到某些对象时执行额外的任务。结合使用 GetType() 和 typeof (这是一个 C#运算符,可以把类名转换为 System.Type 对象),就可以进行比较,如下所示:
if (myObj.GetType() == typeof(MyComplexClass))
{
// myObj is an instance of the class MyComplexClass.
}
返回的 System.Type 对象可以完成更多工作,这里不讨论它们。重写 ToString() 方法也是非常有效的,在对象的内容可以用一个人们能理解的字符串表示时,尤其如此。