/// <summary>
/// 从Object隐式派生
/// </summary>
class OneClass { }
/// <summary>
/// 从Ojbject显示派对生
/// </summary>
class OneClass : System.Object { }
是完全一致的。由于所有类均由System.Object类派生而来,所以可以保证每个类型的每一个对象都会有一套继承于Object类最基本的方法。
Equals(Object):如果两个对象具有相同的值,就返回True
GetHashCode():返回this对象的值的一个哈希码。<详情>
ToString():在没有重写此方法的默认情况下,ToString()返回类型的完整名称(this.GetType().FullName),然而多数情况下,我们都会重写此方法以返回我们需要的内容。像Boolean 和Int32等核心类型的ToString()方法在重写后返回的是它们值的一个字符串形式
GetType():此方法为非虚方法,所以不能对此方法进行重写。方法用于返回由于Type派生的实例类型如:LearnProject.SubClass,返回的Type对象可以和反射类配合使用,从而可以获取与类型有关的元数据信息。由此可见,对此方不能进行重写,是为了防止重写的方法返回错误的类型而破坏类型安全。
另外System.Object还提供另外两个受保护的方法
MemberwiseClone():此方法为非虚方法,可以使用此方法创建类型的一个新实例,并将新对象实例的各个字段设置成与this对象实例的字段完全一致。返回的是对新实例的一个引用,而非this对象本身的引用。
class SubClass:ParentClass
{
public SubClass()
{
ClassName = "DefaultClass";
Console.WriteLine("Sub Constructor Function");
}
public string ClassName
{
set;
get;
}
public SubClass CloneThis()
{
return this.MemberwiseClone() as SubClass;
}
}
SubClass sub = new SubClass();
SubClass subClone = sub.CloneThis();
Console.WriteLine(subClone.ClassName);
subClone.ClassName = "newClassName";
Console.WriteLine(subClone.ClassName);
Console.WriteLine(sub.ClassName);
Finalize:在垃圾收集器判断对象应该对当做垃圾收集之后,对象的内存被实际回收之前,将会调用Finalize()这个虚方法,所以重写此虚方法可以在对象被回收之前执行一系列的清理工作。
//调用对象的析构函数
//此方法仅用于调用Finalize的析构函数,并不会立即将对象的内存进行回收,所以在GC回收的时候仍旧会再次调用~SubClass(){}函数
GC.ReRegisterForFinalize (Object obj);
//禁此调用对象的析构函数,同理上面的方法
GC.SuppressFinalize(Object obj):
也可以通过GC的两个静态方法来手动控制对象析构函数
Finalize是以
~SubClass()
{
Console.WriteLine("GC垃圾回收");
}
的形式而存在
-------CLR VIA C# 学习笔记