所有类型都从System.Object 派生,‘运行时’要求每个类型都从System.Object类派生,也就是说,以下两个类型定义完全一致:

//隐式派生字Object
class Employee
{
do something.....
} //显式派生字Object
class Employee:System.Object
{
do something.....
}

由于所有类型最终都是从System.Object派生,所以每个类型的每个对象都保证了一组最基本的方法,System.Object提供了一下公共实例方法:

1、Equals:如果两个对象具有相同的值,就返回true。

2、GetHashCode:返回对象的值的哈希。

3、ToString:默认返回类型的完整名称(this.GetType().FullName).

4、GetType:返回Type派生的一个类型的实例,指出调用GetType的那个对象是什么类型。返回的Type对象可以和反射类配合,获取与对象的类型有关的元数据信息。

CLR要求所有的对象都使用New关键字创建,以下代码展示了如何创建一个Employee对象:

Employee e = new Employee("ConstructorParameter");

以下是New操作符所做的事情

1、计算类型及其所有的基类型(一直到System.Object,虽然他没有定义自己的实例字段)中定义的所有实例需要的字节数,堆上每个对象都需要一些额外的成员,包括类型对象指针(type object poniter) 和 同步块索引(sync block index)。CLR利用这些成员管理对象,额外成员的字节要计入成员的大小。

2、从托管堆中分配类需要的字节数,从而分类对象的内存,分配所有的字节都设为零。

3、初始化对象的“类型对象指针”和“同步索引块”成员。

4、调用类型的实例构造器,传递在New调用中指定的实参。

new执行了所有这些操作之后,返回指向新建对象的一个引用(指针)。

注: 没有和New操作符对应的delete操作符:换言之没有办法显式的释放为对象分配的内存,CLR采用了垃圾回收机制(GC)自动检测到一个对象不再被使用和被访问,并自动释放对象的内存。

NET基础(1):类型基础的更多相关文章

  1. C# 类型基础——你可能忽略的技术细节

    引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone 其实也就是对象复制.复制又分为了浅度 ...

  2. C# 类型基础

    引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制.复制又分为了浅度复 ...

  3. C#学习笔记——面向对象、面向组件以及类型基础

    C#学习笔记——面向对象.面向组件以及类型基础 目录 一 面向对象与面向组件 二 基元类型与 new 操作 三 值类型与引用类型 四 类型转换 五 相等性与同一性 六 对象哈希码 一 面向对象与面向组 ...

  4. [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系

    原文:[CLR via C#]4. 类型基础及类型.对象.栈和堆运行时的相互联系 CLR要求所有类型最终都要从System.Object派生.也就是所,下面的两个定义是完全相同的, //隐式派生自Sy ...

  5. 抽象鸡类 abstract(抽象) base(基础) class(类型)

    # --> ''' class interface 接口: 建立关联的桥梁, 方便管理代码 (python中没有接口语法) 接口类: 用来定义功能的类 为继承它的子类提供功能 该类的功能法方法一 ...

  6. 《C#从现象到本质》读书笔记(三)第3章C#类型基础(下)

    <C#从现象到本质>读书笔记第3章C#类型基础(下) 常量以关键字const修饰.C#支持静态字段(类型字段)和实例字段. 无参属性的get方法不支持参数,而有参属性的get方法支持传入一 ...

  7. [No0000B9]C# 类型基础 值类型和引用类型 及其 对象复制 浅度复制vs深度复制 深入研究2

    接上[No0000B5]C# 类型基础 值类型和引用类型 及其 对象判等 深入研究1 对象复制 有的时候,创建一个对象可能会非常耗时,比如对象需要从远程数据库中获取数据来填充,又或者创建对象需要读取硬 ...

  8. [No0000B5]C# 类型基础 值类型和引用类型 及其 对象判等 深入研究1

    引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制.复制又分为了浅度复 ...

  9. 《C#从现象到本质》读书笔记(二)第2章 C#类型基础(上)

    <C#从现象到本质>读书笔记第二篇 第2章 C#类型基础(上) 类型指的是集合{类,结构,接口,枚举,委托}中的任意一个成员.任何拥有某类型的值(value)称为某类型的一个实例(inst ...

  10. [Clr via C#读书笔记]Cp4类型基础

    Cp4类型基础 Object类型 Object是所有类型的基类,有Equals,GetHashCode,ToString,GetType四个公共方法,其中GetHashCode,ToString可以o ...

随机推荐

  1. 使用jQuery 的.on() 提交表单

    示例: $(function () { $(document).on('submit', '#FormId', function () { var val = $("#Name") ...

  2. 热烈祝贺华清远见《ARM处理器开发详解》第2版正式出版

    2014年6月,由华清远见研发中心组织多名业 内顶尖讲师编写的<ARM处理器开发详解>一书正式出版.本书以S5PV210处理器为平台,详细介绍了嵌入式系统开发的各个主要环节,并注重实践,辅 ...

  3. 利用SQL注入漏洞登录后台的实现方法 。。。。转载

    一.SQL注入的步骤 a) 寻找注入点(如:登录界面.留言板等) b) 用户自己构造SQL语句(如:' or 1=1#,后面会讲解) c) 将sql语句发送给数据库管理系统(DBMS) d) DBMS ...

  4. SurfaceView的简单使用

    package com.example.administrator.mystudent.surfaceView; import android.content.Context; import andr ...

  5. Eclipse上的项目分享到GitHub

    1. 右击项目:team --> Share Project 2. 在弹出的选择框中选择 Git ,点击Next 3. Configure Git Repository 按照下图选择,点击Fin ...

  6. JAVA List<> 合并去重

    List<A>和List<B>,A/B中均没有重复的,现在保证A/B合并为C,且C中没有重复的. 参考http://blog.csdn.net/secondjanuary/ar ...

  7. ajaxfileupload.js

    jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' ...

  8. 一個相當簡潔的名字—Dyson Humidifier

    現在不止是白領級人物開始網購使用加濕器對皮膚的一個乾燥祈禱防護作用.目前新研究的一款家用的加濕器,戴森首款推出. 作為戴森的首款加濕器產品,該公司賦予了它一個相當簡潔的名字——Dyson Humidi ...

  9. Android课程---布局管理器中的线性布局

    线性布局实例: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:andro ...

  10. CSS权威指南 - 内边距 边框 和 外边距

    九十年代的完全用表格布局,简单的段落边框都需要用表格.CSS让布局更方便. 基本元素框 basic element boxes 如同第七章基本视觉格式化那一章讲到,每个文档元素会生成一个元素框,这个框 ...