[Clr via C#读书笔记]Cp6类型和成员基础
Cp6类型和成员基础
成员
常量;字段(静态字段和实例字段);实例构造器;类型构造器(用于静态字段的构造);方法(静态方法和实例方法);操作符重载(本质是一个方法);转换操作符;属性(本质还是方法);事件(委托);类型(嵌套类);
类型的可见性
public,private,protected,internal,sealed,默认的类是internal。
友元程序集
这部分看看就行了
成员的可访问性
private protected(对应clr是Family),internal(对应clr是assembly),public,protected internal;默认是private;
静态类
静态类一般用作工具类,组合一组相关的成员在一起。
限制:
- 只能派生自Object
- 不能实现任何接口
- 只能定义静态成员
- 不能作为字段,方法参数或者局部变量使用
分部类,分部结构和分部接口
partial关键词,作用就是多个文件好管理,代码拆分。
组件,多态和版本控制
了解组件的含义
主版本,次版本,内部版本,修订号;前两个代表连续,稳定的程序集,后两个代表对这个功能集的一次维护。
CLR是连续带看版本号的,不同的版本号视为不同的程序集。
区分abstract,virtual,override,sealed,new的含义,其实很好理解的;
CLR如何调用虚方法,属性和事件
这块很有意思,直接看书上,结合IL来讲解,比较清楚。call,callvirt指令。只是书上描述的不是很清楚, 暂时没看原版,不知道是不是翻译问题。 网上看了一个人的介绍,call=调用由传递的方法说明符指示的方法,callvirt=对对象调用后期的绑定方法。感觉是可以这么理解。
设计类的时候,尽量减少虚方法的定义,因为性能原因,还有基类丧失对虚成员的控制。
合理使用类型的可见性和成员的可访问性
这里作者认为默认的非sealed类不好,从提高编译后代码性能,安全性和版本控制的角度来考虑的,有道理,但是实际开发中还是习惯不sealed,哈哈。
作者不喜欢嵌套类,我也不喜欢。
对类型进行版本控制的时候的虚方法的处理
这里主要解释了new和override的用法,当然尽量让方法名称不一样吧。
[Clr via C#读书笔记]Cp6类型和成员基础的更多相关文章
- [Clr via C#读书笔记]Cp4类型基础
Cp4类型基础 Object类型 Object是所有类型的基类,有Equals,GetHashCode,ToString,GetType四个公共方法,其中GetHashCode,ToString可以o ...
- CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段
编程语言的基元类型 某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32(); // a = 0 a = 1 ...
- [CLR via C#]6. 类型和成员基础
原文:[CLR via C#]6. 类型和成员基础 6.1 类型的各种成员 在一个类型中,可以定义0个或多个以下种类的成员: 1)常量 常量就是指出数据值恒定不变的符号.这些符号通常用于使代码更 ...
- 《Programming Hive》读书笔记(两)Hive基础知识
<Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...
- 《CLR via C#》读书笔记(6)类型和成员基础
6.1 类型的各种成员 在一个类型中,可以定义0个或者多个以下种类的成员: 常量 常量是在编译时设置其值并且永远不能更改其值的字段.使用常量可以为特殊值提供有意义的名称以代替数字文本,以使代码变得更容 ...
- Clr Via C#读书笔记---程序集的加载和反射
#1 加载程序集 Assembly.Load: public class Assembly { public static Assembly Load(AssemblyName assemblyRef ...
- CLR via C#读书笔记一:CLR的执行模型
CLR(Common Language Runtime)公共语言进行时是一个可由多种编程语言使用的“进行时”. 将源代码编译成托管模块 可用支持CLR的任何语言创建源代码文件,然后用对应的编译器检查语 ...
- <NET CLR via c# 第4版>笔记 第6章 类型和成员基础
6.1 类型的各种成员 6.2 类型的可见性 public 全部可见 internal 程序集内可见(如忽略,默认为internal) 可通过设定友元程序集,允许其它程序集访问该程序集中的所有inte ...
- CLR via C# 读书笔记-21.托管堆和垃圾回收
前言 近段时间工作需要用到了这块知识,遂加急补了一下基础,CLR中这一章节反复看了好多遍,得知一二,便记录下来,给自己做一个学习记录,也希望不对地方能够得到补充指点. 1,.托管代码和非托管代码的区别 ...
随机推荐
- Css中路径data:image/png;base64的用法详解 (转载)
大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如: background-image:url(data:image/png;base64, iVBORw0KGg ...
- #leetcode刷题之路35-搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置.你可以假设数组中无重复元素. 示例 1:输入: [1,3,5,6], 5输出: ...
- Linux中文件函数(一)
一.stat.fstat.fstatat.lstat函数 函数的原型为: #include <sys/stat.h> int stat(const char *restrict pathn ...
- .Net core 使用TimeJob
在我以前的文章中有一个.Net core使用Quartz.Net ,一开始我们的设想就是定时操作数据库,所以有很多实现方法,后来发现TimeJob可以同样实现我们的需求,而且更简便. 所以我们就使用了 ...
- 异常笔记:运行hdfs copyFromLocal 上传文件报错
把本地文件系统,复制到dfs文件系统时报错的错 [hadoop@localhost ~]$ hdfs dfs -copyFromLocal /home/hadoop/mk.txt /xg_test/ ...
- Mongodb从库配置
1. 先以master方式启动mongodb 2. 导入主库的数据文件:/data/mongodb-3.0.12/bin/mongorestore /data/tmp/mongodbbak/ 3. 关 ...
- VUE通过索引值获取数据不渲染的问题
问题:vue里面当通过索引值获取数据时,ajax数据成功返回,但是在火狐下不渲染 解决:
- python--模块之sys与python解释器交互模块
作用:sys模块是与python解释器交互的一个接口.它提供了一系列有关python运行环境的变量和函数. 常用函数:import sys sys.argv #命令行参数list,第一个元素是程序本身 ...
- Python 爬虫 (二)
cookiejar模块: 管理储存cookie,将传出的http请求添加cookie cookie存储在内存中,CookieJar示例回收后cookie将自动消失 实例:用cookjar访问人人网主页 ...
- 浅显易懂的Sysnchronizd用法
<编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下Java线程同步中的一 ...