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/mingxuantongxue/p/3730076.html

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

C# System.Object基类的更多相关文章

  1. System.Object 基类

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

  2. 浅析Object基类提供的Equals方法

    当我们去查看object.cs源代码文件的时候,会发现object基类提供了三种判断相等性的方法.弄清楚每种方法存在的原因,也就是具体解决了什么问题,对我们理解.net判断对象相等性的逻辑很有帮助,下 ...

  3. 【Java】【常用类】Object 基类 源码学习

    源码总览: 有好些都是native本地方法,背后是C++写的 没有关于构造器的描述,默认编译器提供的无参构造 https://blog.csdn.net/dmw412724/article/detai ...

  4. .NET Framework中Object基类有哪些方法?

    ToString(),虚方法,任何子类可重写自定义 GetType(),非虚,返回类型名 Equals(),虚方法,默认情况下判定两个引用是否指向同一实例.(ReferenceEquals()功能相同 ...

  5. C++ 多继承与虚基类

    转载来自:CSDN insistGoGo  (http://blog.csdn.net/insistgogo) 多继承的定义:派生类的基类大于一个 语法: class  派生类名:继承方式1 基类名1 ...

  6. python(七):元类与抽象基类

    一.实例创建 在创建实例时,调用__new__方法和__init__方法,这两个方法在没有定义时,是自动调用了object来实现的.python3默认创建的类是继承了object. class A(o ...

  7. .NET基础 (11)类型的基类System.Object

    类型的基类System.Object1 是否存在不继承自System.Object类型的类2 在System.Object中定义的三个比较方法有何异同3 如何重写GetHashCode方法 类型的基类 ...

  8. 定义类、System.Object对象、构造函数与析构函数、抽象类与静态类

    一.类定义 class MyClass { //类成员 } 1.访问级别 默认访问级别为internal(内部类),也可以是public(公共类) internal(内部类):当前项目中的代码才能访问 ...

  9. Entity FreamWork 无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型错误解决

    Entity FreamWork 无法创建“System.Object”类型的常量值.此上下文仅支持基元类型或枚举类型错误解决: 最近在开发中把我原来抄的架构里面的主键由固定的Guid改成了可以泛型指 ...

随机推荐

  1. OpenWRT 编译 error GNU libiconv not in use but included iconv.h is from...

    OpenWRT 编译 error GNU libiconv not in use but included iconv.h is from... 编译的时候碰到一个常见的错误,但是却在一个陌生的地方爆 ...

  2. Grid++Report 数据填充教程

    用 Grid++Report的报表设计器应用程序设计一个简单的报表:“机房开发收入总汇表”                  一.定义报表头 1.执行菜单命令“插入”→“报表头” 2.执行菜单命令“插 ...

  3. hdu5772-String problem(最大权闭合子图问题)

    解析: 多校标答 第一类:Pij 表示第i个点和第j个点组合的点,那么Pij的权值等于w[i][j]+w[j][i](表示得分)第二类:原串中的n个点每个点拆出一个点,第i个点权值为 –a[s[i]] ...

  4. 【Python脚本】Eclipse IDE扩展PyDev插件安装

    作为一名Python的初学者,其实不用太在意IDE了,我觉得开始的时候用用自带的 IDLE 也挺好的. 还有 DreamPie 也挺好的.都是一些轻量级的IDE. 因为我正好安装有Eclipse,平时 ...

  5. AE分级渲染

    分级渲染classbreakrenderer位于carto类库中,进行分级渲染时,首先要将相应图层按照某一Field分级.可使用esrisystem类库中的iclassifyGEN类的classify ...

  6. ionic 图片轮播问题

    1.使用ion-slide可以实现图片轮播,但是如果在html中仅仅增加ion-slide是远远不够的,会出现两个问题: (注:使用的是angularjs.首先需要在,js文件中注入:$ionicSl ...

  7. sql server 删除所有表和存储过程

    1.删除外键约束 DECLARE c1 cursor for select 'alter table ['+ object_name(parent_obj) + '] drop constraint ...

  8. Entity Framework Code First主外键关系映射约定

    本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...

  9. Xcode 常用快捷键及代码自动排版

    1. 文件CMD + N: 新文件CMD + SHIFT + N: 新项目CMD + O: 打开CMD + S: 保存CMD+OPt+S:保存所有文件CMD + SHIFT + S: 另存为CMD + ...

  10. C语言链表各类操作详解

    链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.它可以根据需要开辟内存单元.链表有一个“头指针”变量,以head表示,它存放一个地址.该地址指向一个元素.链表中每一个元素称 ...