• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 带着问题读CLR via C#(笔记二)类型基础

带着问题读CLR via C#(笔记二)类型基础

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了clr via c#中文版,clr via c#中文版 pdf,clr via c#第四版,clr via c#下载,clr via c 第4版 pdf等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Q1: Object类型包含哪些方法?

A1: Object类型共包含6个方法,Equals, GetHashCode, ToString, GetType, MemberwiseClone和Finalize.

Q2: new一个对象的过程是什么?

A2: 1)计算对象所需字节数,包括该类型及其基类型定义的所有实例字段所需的字节数和类型对象指针、同步块索引所需字节数,类型指针和同步块索引是CLR用来管理对象的;2)在托管堆上分配该对象所需内存空间;3)初始化类型对象指针和同步块索引;4)执行构造函数。大多数编译器都在构造函数中自动生成一段代码调用基类构造函数,每个类型的构造函数在执行时都会初始化该类型定义的实例字段。5)返回指向新建对象的一个引用,保存在对象变量中。

可用如下代码验证第四步:

执行结果如下:

Q3: 父类型和子类型间如何进行转换?

A3: C#允许将一个对象从它的本身类型转换为它的父类型,这是安全的,不需要做任何额外操作,但要将一个对象从它的本身类型转换为它的子类型,则必须要显式转换,因为可能会失败。见代码:

这段代码是无法编译通过的,在Main方法的第四行会报一个这样的错误:

Error 1 Cannot implicitly convert type 'TypeBasic.Person' to 'TypeBasic.Man'. An explicit conversion exists (are you missing a cast?) C:\Users\Allen\Documents\Visual Studio 2012\Projects\TypeBasic\TypeBasic\Program.cs 16 21 TypeBasic

很显然,一个 “男人” 一定是一个人,故可以直接转换,但一个 “人” 并不一定是一个 “男人”,所以必须要显式转换。可将代码这样改写:

// To
Man m = (Man)person;    
</div>

这样就可以成功通过编译,但是在运行的时却抛出了异常,很显然,Person不能被转换为Man. 什么情况下Person可以被转换为Man? 见如下代码:

Q4: is和as操作符的作用是什么?

A4: is操作符用来判断一个对象是否属于某种类型,返回一个布尔值。改写下上例的Test方法:

</div>

以上代码共进行了两次类型检测,is操作符首先检测p是否为Man类型,在if的方法体中进行强制转换时,CLR会再次检测p的类型,这对性能有一定影响。

as操作符很好的解决了这个问题,再次改写Test方法:

</div>

as操作符在检测p的类型后会直接对p进行类型转换,返回一个Man类型的对象,若检测出p不是Man类型,则会返回null. 整个过程只进行了一次类型检测。

Q5: 什

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#利用微软自带库进行中文繁体和简体之间转换的方法
  • C#之CLR内存深入分析
  • C#之CLR内存原理初探
  • C#之CLR内存字符串常量池(string)
  • 重温C# clr 笔记总结
  • 带着问题读CLR via C#(笔记二)类型基础
  • 带着问题读CLR via C#(笔记一)CLR的执行模型

相关文章

  • 2017-05-28聊一聊C#接口问题 新手速来围观
  • 2017-05-28C#常用正则验证函数示例
  • 2017-05-28C# WinForm开发中使用XML配置文件实例
  • 2017-05-28C#使用ADO.Net部件来访问Access数据库的方法
  • 2017-05-28C#操作SQLite方法实例详解
  • 2017-05-28C# 调用 JavaWebservice服务遇到的问题汇总
  • 2017-05-28泛型编程去掉字段重复数据的方法
  • 2017-05-28C#的回调机制浅析
  • 2017-05-28C#中结构(struct)的部分初始化和完全初始化实例分析
  • 2017-05-28C#获取路由器外网IP,MAC地址的实现代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C# string格式的日期时间字符串转为DateTime类型的方法
    • 怎么利用c#修改services的Startup type
    • C#图像处理之边缘检测(Smoothed)的方法
    • C#在winform中实现数据增删改查等功能
    • c#可空类型的作用说明
    • 适用于WebForm Mvc的Pager分页组件C#实现
    • C#实现.net页面之间传值传参方法汇总
    • C#实现根据银行卡卡号判断银行名
    • c#字符长度查询代码
    • C#远程获取图片文件流的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有