C# System.Object基类

  System.Object在.Net中是全部类型的基类,任何类型都直接或间接地继承自System.Object。没有指定基类的类型都默认继承于System.Object。html

基类特性

  正因为全部的类型都继承于System.Object。所以,全部的类型都具备下面这些特性:安全

  •   GetType()方法,获取对象的类型。
  •   Equals、ReferenceEquals和==,判断对象是否相等。
  •   ToString()方法,获取对象的字符串信息,默认返回对象带命名空间的全名。
  •   MemberwiseClone()方法,对象实例的浅拷贝。
  •   GetHashCode()方法,获取对象的值的散列码。
  •   Finalize()方法,在垃圾回收时,进行资源管理。

ToString()解析

  ToString()是一个虚方法,用于返回对象的字符串表示,在Object类型的实现相似于:ide

  public virtual string ToString()
  {
    return this.GetType().FullName.ToString();              
  }

  咱们很容易就可以对ToString()进行覆写,以实现咱们想要的效果:post

复制代码
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(new Person().ToString());     //输出 我是一个Person类!

            Console.ReadKey();
        }
    }

    public class Person
    {
        public override string ToString()
        {
            return "我是一个Person类!";
        }
    }
复制代码

  .Net中不少类型也实现了对ToString()方法的覆写,例如Boolean类型就覆写了ToString()方法来返回真或假的字符串:this

复制代码
    public override string ToString()
    {
        if(!this)
        {
            return "False";
        }
        return "True";
    }
复制代码

  在处理字符串格式化、语言文化方面。ToString()没有太多的办法。解决的办法是实现IFormattable接口。IFormattable接口的定义以下:url

    public interface IFormattable
    {
        string ToString(string format, System.IFormatProvider formatProvider);
    }

  参数format指定要格式化的方式,而参数formatProvider则提供了特定语言文化信息。大部分.Net基本类型都实现了IFormattable接口,用于实现更灵活的字符串信息输出。spa

GetType()解析

  GetType()方法,不是虚方法,用于在运行时经过查询对象元数据来获取对象的运行时类型。子类没法经过覆写GetType()而篡改类型信息,从而保证了类型安全。code

  示例:orm

复制代码
        static void Main(string[] args)
        {
            Person p = new Person();
            Type t = p.GetType();    //实例方法
            Console.WriteLine(t.FullName);  //输出对象所在类的全称

            Console.ReadKey();
        }
复制代码

  其实,这个方法就是返回一个System.Type类的对象,该对象在反射中经常使用到。反射不是本文的范畴,再也不叙述。htm

  在.Net中,下面的方法可以实现与System.Object的GetType()方法相同的效果:

  •   Type.GetType()静态方法
  •   typeof运算符

  下面说说它们二者的区别:

  Type.GetType()是非强类型方法,支持输入字符串做为参数;而typeof运算符支持强类型。

  Type t = Type.GetType("ConsoleApplication.Person");
  Type t = typeof(ConsoleApplication.Person);

  另外,要特别注意的就是,只有Type.GetType()支持跨程序集反射,解决动态引用;而typeof只能支持静态引用。

    Assembly ass = Assembly.LoadFrom(@"C:\Model.dll");
    Type t = ass.GetType("Model.Person");

  关于他们之间的区别,能够查看:http://www.cnblogs.com/mingxuantongxue/p/3730076.html

  其余方法的范畴归属,全均可以另起一篇文章。待我想一想。

相关文章
相关标签/搜索