04.类型基础

所有类型都从System.Object派生

Object类型的公开方法

Equals、GetHashCode、GetType、ToString

Object类型的受保护方法

MembervieseClone、Finalize

new操作符所做的事情

1.它计算类型和它的所有基类中定义所有字段需要的字节数

2.它从托管堆中分配指定类型要求的字节数,从而分配对象的内存,分配的所有字节都设为零

3.初始化对象的成员

4.调用类型的构造函数

5.返回新建对象的引用

类型转换

CLR允许将一个对象转换成它的(实际)类型或者它的任何基类型

向基类型转换是一种安全的隐式转换,然而将其转换成派生类时则需要显式地转换

使用C#的is和as操作符来转型

is检查一个对象是否兼容于指定的类型,并返回一个bool值,is操作符永远不会抛出异常

使用as操作符,则CLR检查类型可以减少检查一次,提高系统的性能

as操作符的工作方式与强制类型转换一样,如果不能转换,则返回一个null

命名空间和程序集不一定是相关的

运行时的相互联系

类型、对象、线程栈和托管堆

栈是从高位内存地址到低位内存地址构建的

调用一个方法时,还会将一个"返回地址"压入栈,被调用的方法结束之后,应该返回这个位置

将数据存放于堆中

检查内部所有的引用类型,确保对应的程序集被加载,通过程序集中的元数据,CLR会提取这些类型的相关信息,并创建一些结构表示类型本身,并存放于堆中

堆上的所有对象都包含两个额外的成员:类型对象指针和同步块索引

  调用一个非虚实例方法时,JIT编译器会查询该类型中的方法表,如果没有找到,则会向上查询,查询该类型的基类是否包含这个方法,一直找到Object类型

调用一个虚方法时,JIT编译器会生成额外的代码,通过这些代码检查发出调用的变量,代码检查类型对象指针,这个成员指向对象的实际类型,在该类型对象中查找调用的方法

时间: 2024-08-08 10:05:18

04.类型基础的相关文章

【C#进阶系列】04 类型基础

关于System.Object 所有类型都从System.Object派生而来. System.Object的公共方法中ToString()一般是返回对象的类型的全名,只有Int32这些类型将其重写后,新方法才会返回其值的字符串表示. 其中还有两个受保护的方法: MemberwiseClone:深复制. Finalize:在垃圾回收器判断此对象应该被回收后,在对象的内存被实际回收前会调用此方法. 关于类型判断和转换: 用is来判断对象为某类型或者某类型的派生类,是为true,不是为false.

[分享]Ubuntu12.04安装基础教程(图文)

原文地址: http://teliute.org/linux/Ubsetup/lesson21/lesson21.html 1.进入 live cd 桌面 1)设置好启动后,断开网络,然后重新启动动计算机,能够用硬盘启动,也能够刻成光盘启动,镜像的下载地址: 进入后找蓝色链接点击下载,如 ubuntu-12.04-desktop-i386.iso,64位CPU能够下载amd64的版本号:http://mirrors.sohu.com/ubuntu-releases/12.04/ WinXP硬盘安

Exchange 2016部署实施案例篇-04.Ex基础配置篇(中)

昨天更新了基础配置的上篇<Exchange 2016部署实施案例篇-04.Ex基础配置篇(上)>,欢迎各位老铁多多提出宝贵意见,非常感谢. 虚拟目录 自动发现配置 有的朋友可能知道,虽然在虚拟目录里有自动发现这个选项,但自动发现记录在图形化界面无法配置自动发现地址,如图所示 其实自动发现路径需要使用命令修改,我们先查下现在的自动发现写的是什么鬼 查看自动发现配置情况命令:Get-ClientAccessService | select Name,AutoDiscoverServiceInter

.NET面试题解析(04)-类型、方法与继承

  系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 做技术是清苦的.一个人,一台机器,相对无言,代码纷飞,bug无情.须梦里挑灯,冥思苦想,肝血暗耗,板凳坐穿.世界繁华竞逐,而你独钓寒江,看尽千山暮雪,听彻寒更雨歇.——来自<技术人的慰藉> 常见面试题目: 1. 所有类型都继承System.Object吗? 2. 解释virtual.sealed.override和abstract的区别 3. 接口和类有什么异同? 4. 抽象类和接口有什么区别?使用时

C#语言-04.OOP基础

a. OOP:面对对象思想 i. 类:是一种功能强大的数据类型,而且是面向对象的基础 1. 语法:访问修饰符 class 类名{ //类的主体 } 2. 成员变量:不以"函数"形式体现 a. 常量:代表与类相关的常量值 b. 变量:类中的变量 c. 事件:由类产生的通知,用于说明发生了什么事件 d. 类型:属于类的局部类型 3. 成员函数:以"函数"形式体现 a. 方法:完成类中各种计算或功能的操作,不能和类同名.不能和类中其他成员同名 b. 属性:定义类的值,并对

C# 类型基础 值类型和引用类型

引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制.复制又分为了浅度复制(Shallow Copy)和深度复制(Deep Copy),浅度复制和深度复制又是以如何复制引用类型成员来划分的.由此又引出了引用类型和值类型,以及相关的对象判等.装箱.拆箱等基础知识.索性从最基础的类型开始自底向上写起. 值类型和引用类型 先简单回顾一下C#中的类型系统.C# 中的类型一共分为

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

引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone 其实也就是对象复制.复制又分为了浅度复制(Shallow Copy)和 深度复制(Deep Copy),浅度复制 和 深度复制又是以 如何复制引用类型成员来划分的.由此又引出了 引用类型 和 值类型,以及相关的对象判等.装箱.拆箱等基础知识. 于是我干脆新起一篇,从最基础的类型开始自底向上写起了.我仅仅想将对于这个主题的理解表述出来,

第四章 类型基础

1. 概述 本章讲述使用 类型 和 CLR 时需要掌握的一些基础知识. 2. 名词解释 3. 主要内容 3.1 所有类型都从System.Object 派生 所有对象都用new操作符来创建,步骤如下: ① 计算类型及其所有基类型中定义的实例字段需要的字节数.包括两个额外成员:类型对象指针 和 同步块索引. ② 从托管堆中分配指定类型要求的字节数,从而分配对象的内存,分配的所有字节都设为零(0). ③ 初始化对象的 类型对象指针 和 同步块索引. ④ 调用类型的实例构造器,向其传入在对new的调用

C# 类型基础

引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制.复制又分为了浅度复制(Shallow Copy)和深度复制(Deep Copy),浅度复制 和 深度复制又是以 如何复制引用类型成员来划分的.由此又引出了 引用类型和 值类型,以及相关的对象判等.装箱.拆箱等基础知识. 于是我干脆新起一篇,从最基础的类型开始自底向上写起了.我仅仅想将对于这个主题的理解表述出来,一是总