• System.Object 基类


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

    基类特性

      正由于所有的类型都继承于System.Object。因此,所有的类型都具有下面这些特性:

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

    ToString()解析

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

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

      我们很容易就能够对ToString()进行覆写,以实现我们想要的效果:

        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()方法来返回真或假的字符串:

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

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

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

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

    GetType()解析

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

      示例:

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

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

      在.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/kissdodog/archive/2013/04/04/2999182.html

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

  • 相关阅读:
    进击Node.js基础(一)
    关于bootstrap两个模态框的问题
    系列博文-Three.js入门指南(张雯莉)-网格 setInterval方法 requestAnimationFrame方法 使用stat.js记录FPS
    系列博文-Three.js入门指南(张雯莉)-照相机
    系列博文-Three.js入门指南(张雯莉)-静态demo和three.js功能概览
    for循环执行效率
    c/c++多维数组动态分配与释放
    C/C++数组指针与指针数组详解
    C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递
    float类型最大值和最小值
  • 原文地址:https://www.cnblogs.com/kissdodog/p/3346394.html
Copyright © 2020-2023  润新知