System.Object在.Net中是全部类型的基类,任何类型都直接或间接地继承自System.Object。没有指定基类的类型都默认继承于System.Object。html
正因为全部的类型都继承于System.Object。所以,全部的类型都具备下面这些特性:安全
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()而篡改类型信息,从而保证了类型安全。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 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
其余方法的范畴归属,全均可以另起一篇文章。待我想一想。