C# 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/mingxuantongxue/p/3730076.html
其他方法的范畴归属,全都可以另起一篇文章。待我想想。
C# System.Object基类的更多相关文章
- System.Object 基类
System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object.没有指定基类的类型都默认继承于System.Object. 基类特性 正由于所有的类型都 ...
- 浅析Object基类提供的Equals方法
当我们去查看object.cs源代码文件的时候,会发现object基类提供了三种判断相等性的方法.弄清楚每种方法存在的原因,也就是具体解决了什么问题,对我们理解.net判断对象相等性的逻辑很有帮助,下 ...
- 【Java】【常用类】Object 基类 源码学习
源码总览: 有好些都是native本地方法,背后是C++写的 没有关于构造器的描述,默认编译器提供的无参构造 https://blog.csdn.net/dmw412724/article/detai ...
- .NET Framework中Object基类有哪些方法?
ToString(),虚方法,任何子类可重写自定义 GetType(),非虚,返回类型名 Equals(),虚方法,默认情况下判定两个引用是否指向同一实例.(ReferenceEquals()功能相同 ...
- C++ 多继承与虚基类
转载来自:CSDN insistGoGo (http://blog.csdn.net/insistgogo) 多继承的定义:派生类的基类大于一个 语法: class 派生类名:继承方式1 基类名1 ...
- python(七):元类与抽象基类
一.实例创建 在创建实例时,调用__new__方法和__init__方法,这两个方法在没有定义时,是自动调用了object来实现的.python3默认创建的类是继承了object. class A(o ...
- .NET基础 (11)类型的基类System.Object
类型的基类System.Object1 是否存在不继承自System.Object类型的类2 在System.Object中定义的三个比较方法有何异同3 如何重写GetHashCode方法 类型的基类 ...
- 定义类、System.Object对象、构造函数与析构函数、抽象类与静态类
一.类定义 class MyClass { //类成员 } 1.访问级别 默认访问级别为internal(内部类),也可以是public(公共类) internal(内部类):当前项目中的代码才能访问 ...
- Entity FreamWork 无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型错误解决
Entity FreamWork 无法创建“System.Object”类型的常量值.此上下文仅支持基元类型或枚举类型错误解决: 最近在开发中把我原来抄的架构里面的主键由固定的Guid改成了可以泛型指 ...
随机推荐
- LeetCode_Triangle
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- 查看mysql字符集及修改表结构--表字符集,字段字符集
MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...
- linux下tcpdump命令详解
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...
- 【剑指offer】面试题35:第一个只出现一次的字符
题目: 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置.若为空串,返回-1.(书上是要求返回字符) 思路: 第一遍扫描保存下每个字符出现的 ...
- 相似文档查找算法之 simHash 简介及其 java 实现 - leejun_2005的个人页面 - 开源中国社区
相似文档查找算法之 simHash 简介及其 java 实现 - leejun_2005的个人页面 - 开源中国社区 相似文档查找算法之 simHash 简介及其 java 实现
- 第六百二十一天 how can I 坚持
好歹都是一些集成的框架,也懒得去深入研究了,微信小程序,今天体验了一个,虽然内心非常相信张小龙,但是还是不太看好,但是感觉确实需要一种方式去简化应用程序的开发,今天把没用的app都删了,太耽误时间了, ...
- Oracle 方法
1.递归 select zxdept from (select d.id, d.zxdept, d.RANK, d.fatherId from web_dept d start with d.id = ...
- Android应用程序资源的查找过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8806798 我们知道,在Android系统中, ...
- 免费自学Cocos2d-x3.0final2014原创视频教程(56集)(适用于Cocos2d-x3.1 Cocos2d-x3.2版本号全)
Cocos2d-x3.0final(适用于Cocos2d-x3.1 Cocos2d-x3.2版本号全) 视频播放地址:http://yun.itxdl.cn/course/62 视频下载地址:http ...
- Git 多人协作的工作模式
多人协作 148次阅读 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git rem ...