对于CLR,它要求每一个类型都最终是从System.Object类派生而来,所以使用

    /// <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# 学习笔记

posted on 2008-10-07 23:50  .Net Learning  阅读(283)  评论(0编辑  收藏  举报