[C#1] 2-类型基础
时间:2022-04-23
本文章向大家介绍[C#1] 2-类型基础,主要内容包括1.System.Object、2.类型转换、3.命名空间和程序集、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
1.System.Object
CLR要求每个类型都要继承自System.Object[直接或者间接方式],如果不显示继承,编译器会自动为我们添加对System.Object的继承。
System.Object提供几个公有实例方法:
- Equals:如果两个对象具有相同的值,返回true;
- GetHashCode: 返回对象的值的散列码。
- ToString: 默认情况下返回类型的完全限定名。一般自定义类型中要重写该方法,返回有意义的字符串;
- GetType: 返回一个类型为继承自Type的对象实例,返回的Type对象和反射类一起来获得元数据信息,本方法是一个非虚方法,防止一个类通过重写隐瞒真实类型,从而破坏类型安全。
两个受保护方法:
- MemberwiseClone:非虚方法,它创建一个新的类型实例【浅拷贝(共享引用成员)】;
- Finalize:虚方法,执行垃圾回收之前会调用该方法;
引用类型new的过程:
- 从托管堆中分配指定类型所需数量的字节来作为其存储对象的内存空间;
- 初始化对象的附加成员(overhead members):一是类型方法表指针,二是SyncBlockIndex【线程同步控制、该字段的某些位还用作垃圾收集时的标记、Object默认的GetHashCode方法也调用了该字段】;
- 调用类型的实例构造器【CLR并没有要求调用基类中相应的构造器】
- 完成上述操作后返回一个指向新创建对象的引用。
2.类型转换
- 强制类型转换,需要程序员自己负责,如果转换不成功抛出Sysem.InvalidCastException【无效的转换】异常;
- 隐式类型转换,C#不需要特殊的语法就可以将对象转换为其任何一个基类型;
- is,is检查制定对象是否兼容与指定的类型,返回bool;
- as类型转换,成功返回对象引用,失败返回null;
3.命名空间和程序集
首先CLR没有命名空间的概念,也就是CLR根本就不认识命名空间。CLR用的是类型的完全限定名,一个程序集中可以存在多个命名空间,一个命名空间下也可以包含多个程序集。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 《秋风日常第三期》11个前端开发者必备的网站
- 专为程序员定制的垃圾清理工具(Node Cli实现)
- CodePen vue SFC 、flutter 在线玩耍来袭
- [重拾CSS]一道面试题来看伪元素、包含块和高度坍塌
- webpack 拍了拍你,给了你一份图解指南(模块化部分)
- 深入探究Immutable.js的实现机制(一)
- 深入探究immutable.js的实现机制(二)
- ES6 Promise 的最佳实践
- 「 Map最佳实践」什么时候适合使用 Map 而不是 Object
- ES2017 异步函数的最佳实践(`async` /`await`)
- React Hooks中这样写HTTP请求可以避免内存泄漏
- 用了这 7 个 VS Code 插件,想写一辈子代码
- 听说你还不知道Promise的allSettled()和all()的区别?
- React 条件渲染最佳实践(7 种方法)
- 一文带你层层解锁「文件下载」的奥秘