C#基础巩固之基础类型
注:以下笔记全摘录自CLR via C# 3
1、所有类型都从System.Object派生:”运行时“要求每个类型最终都从System.Object派生。
2、System.Object提供了四个公共实例方法:
(1) Equals :如果两个对象具有相同的值,就返回true。
(2) GetHashCode
(3) ToString:该方法默认返回类型的完整名称(this.GetType().FullName)。然而,我们经常重写这个方法,使它返回一个String对象,其中包含对象状态的一个表示。例如,核心类型(比如Boolean和Int32)重写了这个方法,返回他们值的一个字符串表示。
(4) GetType:返回Type派生的一个对象的实例,指出调用GetType的那个对象是什么类型。返回的Type对象可以和反射类配合使用,从而获取与对象的类型有关的元数据信息。
3、System.Object的受保护方法:
(1) MemberwiseClone:这个非虚方法能创建一个类型的新实例,并将新对象的实例字段设与this对象的实例字段完全一致。返回的是对新实例的一个引用。
(2) Finalize:在垃圾回收器判断对象应该被作为垃圾回收之后,在对象的内存被实际回收之前,会调用这个虚方法。
4、CLR要求所有对象都用new操作符来创建。以下是new操作符所做的事情。
(1) 它计算类型及其所有基类型(一直到System.Object,虽然它没有定义自己的实例字段)中所有字段需要的字节数。堆上每个对象都需要一些额外成员,”类型对象指针“(type object pointer)和“同步块索引”(sync block index)。这些成员由CLR用于管理对象。这些额外成员的字节数会计入对象大小。
(2)它从托管堆中分配指定类型要求的字节数,从而分配对象的内存,分配的所有字节都设为零(0)。
(3)它初始化对象的”类型对象指针“和”同步块索引“成员。、
(4)调用类型的实例构造器,向其传入在对new的调用中指定的任何实参。
5、顺便说一句,没有和new操作符对应的delete操作符;换言之,没有办法显示释放为一个对象分配的内存。
6、CLR最重要的特性之一就是类型安全性。(其它的重要特性呢?)
7、使用C# 的is 和as操作符来转型。
(1)is :用于检查一个对象是否兼容于指定的类型,并返回一个Boolean值:true或false。注意:is操作符永远不会抛出异常。如果引用对象是null,is操作符总是返回false,因为没有可检查其类型的对象。
is操作符通常像下面这样使用(放到if判断里面)
if( o is Employee){
Employee e=(Employee ) o;
//在剩下的代码用e
}
这段代码,CLR会检查两次对象的类型;is 操作符首先核实o是否兼容于一个Employee类型。如果是,那么在if语句内部执行时,CLR再次核实o是否引用一个Employee。(类型检查增加了安全性,但是有性能损失)
(2)as:简化is的写法,同时提升性能(只校验一次)。as的工作方式和强制类型转换一样,只是它永远不会抛出异常,如果对象不能转型,结果就为null。所以,正确的做法是检查最终生成的引用是否为null。如果企图直接使用最终生成的引用,会抛出一个System.NullReferenceException异常,以下代码对此进行了演示:
Object o = new Object(); //新建一个Object对象
Employee e = o as Employee; // 将o转型为一个Employee
//上述操作会失败,不会抛出异常,但e会被设为null
e.ToString(); //访问e会抛出一个NullReferenceException异常
8、命名空间和程序集
命名空间(namespace)用于对相关的类型进行逻辑性分组,开发人员使用命名空间方便的定位一个类型。
在C#中,namespace的作用只是告诉编译器为源代码中出现的每个类型名称附加空间名称前缀,减少程序员的打字量。
命名空间和程序集的关系:
注意,命名空间和程序集不一定是相关的。特别是,同一个命名空间中各个类型可能是在不同程序集中实现的。例如,System.IO.FileStream类型是在MSCorLib.dll程序集中实现的,儿System.IO.FileSystemWatch类型是在System.dll程序集中实现的。
在一个程序集中,也可能包含不同命名空间中的类型。例如,System.Int32和System.Text.StringBuilder类型都在MSCorbLic.dll中。
C#基础巩固之基础类型的更多相关文章
- Javascript基础回顾 之(一) 类型
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- C#_02.12_基础二_.NET类型存储和变量
C#_02.12_基础二_.NET类型存储和变量 一.核心一句:C#程序是一组类型声明(留待后面慢慢体会,现在不是很理解,不强说了) 二.数据类型: 1.预定义了16种数据类型: 其中13种简单数据类 ...
- Java基础教程:枚举类型
Java基础教程:枚举类型 枚举类型 枚举是将一具有类似特性的值归纳在一起的方法.比如,我们可以将周一到周日设计为一个枚举类型.彩虹的七种颜色设计为一个枚举类型. 常量实现枚举 我们通过定义常量的方式 ...
- Python基础之Python语言类型
编程语言主要从以下几个角度进行分类: 编译型和解释型 静态语言和动态语言 强类型定义语言和弱类型定义语言 编译和解释的区别是什么? 编译器把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样 ...
- GO语言基础(结构+语法+类型+变量)
GO语言基础(结构+语法+类型+变量) Go语言结构 Go语言语法 Go语言类型 Go语言变量 Go 语言结构 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 &a ...
- MYSQL、PHP基础、面向对象基础简单复习总结
一.MYSQL 1.配置MySql 第一步安装服务器(apache). 第二部安装MySql界面程序 2 ...
- Jmeter基础之---jmeter基础概念
Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...
- [.net 面向对象编程基础] (3) 基础中的基础——数据类型
[.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型 ...
- [.net 面向对象编程基础] (4) 基础中的基础——数据类型转换
[.net面向对象编程基础] (4)基础中的基础——数据类型转换 1.为什么要进行数据转换? 首先,为什么要进行数据转换,拿值类型例子说明一下, 比如:我们要把23角零钱,换成2.30元,就需要把整形 ...
随机推荐
- Centos7安装Openldap初级篇
openldap 单节点编译安装 1.获取源码包 #下载Berkeley DB www.oracle.com/technetwork/database/database-technologies/be ...
- CentOS上手工部署kubernetes集群
本文完全是根据二进制部署kubernets集群的所有步骤,同时开启了集群的TLS安全认证. 环境说明 在下面的步骤中,我们将在三台CentOS系统的物理机上部署具有三个节点的kubernetes1.7 ...
- setAttribute和setParameter方法的区别
getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型 getParame ...
- HDU 1025(最长上升子序列)
题意是要在两条平行线间连点,要在线不交叉的前提下尽可能多的连线,问最多能连多少条线. 现假定题中所给的是 9 组点,分别是:1—3,2—8,3—5,4—9,5—2,6—4,7—6,8—7,9—1,如图 ...
- HDU 1115(求质量均匀分布的多边形重心 物理)
题意是给一个 n 边形,给出沿逆时针方向分布的各顶点的坐标,求出 n 边形的重心. 求多边形重心的情况大致上有三种: 一.多边形的质量都分布在各顶点上,像是用轻杆连接成的多边形框,各顶点的坐标为Xi, ...
- Golang入门教程(十一)beego 框架之RESTful Controller 路由
官方文档:https://beego.me/docs/mvc/controller/router.md 什么是路由设置呢?前面介绍的 MVC 结构执行时,介绍过 beego 存在三种方式的路由:固定路 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理(附源码)
前言:时间很快,已经快到春节的时间了,这段时间由于生病,博客基本没更新,所以今天写一下我们做的一个项目吧,是对权限的基本操作的操作,代码也就不怎么说了,直接上传源码和图片展示,下面我们直接进入主题介绍 ...
- ArcGis Python脚本——批量对影像、要素类定义投影
这一段是批量定义要素类(FeatureClasses)投影的ArcPy代码: 把要处理的要素类塞进一个文件夹(工作空间,workspace),然后将代码开头的路径换成这个“文件夹”的路径,处理完后再做 ...
- 判断以及防止SQL注入
SQL注入是目前黑客最常用的攻击手段,它的原理是利用数据库对特殊标识符的解析强行从页面向后台传入.改变SQL语句结构,达到扩展权限.创建高等级用户.强行修改用户资料等等操作. 那怎么判断是否被SQL注 ...
- PDO和MySQLi区别与选择?
当用PHP访问数据库时,除了PHP自带的数据库驱动,我们一般还有两种比较好的选择:PDO和MySQLi.在实际开发过程中要决定选择哪一种首先要对二者有一个比较全面的了解.本文就针对他们的不同点进行分析 ...