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. LeetCode_Spiral Matrix

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  2. smarty模板执行原理

    为了实现程序的业务逻辑和内容表现页面的分离从而提高开发速度,php 引入了模板引擎的概念,php 模板引擎里面最流行的可以说是smarty了,smarty因其功能强大而且速度快而被广大php web开 ...

  3. device tree website

    每一个设备都有相对应的初始化程序,dts的写法可以参照Documentations/devicetree/下面的文档 http://bbs.chinaunix.net/thread-4139331-1 ...

  4. 2013第46周四xml作为WS两端中间测试文件

    今天又到了11点多才开始写随笔记录,有点惭愧,加班回来到现在已经近2小时了,而我此刻才进入正题,之前的时间都跟MM聊天了,或许是单身久了,居然在个人情感方面感觉自己很out了,不想这些了,重点是回顾下 ...

  5. CF 579A Raising Bacteria

    题意:细菌爱好者在盒子里面培养细菌.最初盒子是空的,每天可以往盒子里面添加任意数目的细菌,而且每天每个细菌会分裂成两个.在某一时刻要想获得某一数量的细菌,要求最初放置的最少的细菌数目. 思路: 求出 ...

  6. Reverse Linked List II 解答

    Question Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Giv ...

  7. Increasing/ Decreasing Stack

    对于此类问题: 对于元素nums[i],找出往左/右走第一个比它小/大的数字 我们常常用递增栈/递减栈实现. 递增栈实现第一个比它小 递减栈实现第一个比它大 Example: 2 1 5 6 2 3 ...

  8. soj 1700 ping_简单dp

    题目链接 题意:给你一个无向图,求n边的最短路 思路:用最短路想了半天都没想出来,比赛结束回去看看原来用dp做,我的dp有待提高啊 sp[i][k]=min(sp[j][k-1]+dp[j][i])/ ...

  9. javascript的事件处理

        首先了解一下什么是事件?事件是web浏览器通知应用程序发生了什么事情.我们可以通过一些方式注册事件用来监听一些我们需要处理的事件.事件包含一下一些属性:     事件类型:用来说明是什么类型事 ...

  10. POJ 3046 Ant Counting DP

    大致题意:给你a个数字,这些数字范围是1到t,每种数字最多100个,求问你这些a个数字进行组合(不包含重复),长度为s到b的集合一共有多少个. 思路:d[i][j]——前i种数字组成长度为j的集合有多 ...