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类型和成员基础的更多相关文章

  1. [Clr via C#读书笔记]Cp4类型基础

    Cp4类型基础 Object类型 Object是所有类型的基类,有Equals,GetHashCode,ToString,GetType四个公共方法,其中GetHashCode,ToString可以o ...

  2. CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段

    编程语言的基元类型   某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32();  // a = 0 a = 1 ...

  3. [CLR via C#]6. 类型和成员基础

    原文:[CLR via C#]6. 类型和成员基础 6.1 类型的各种成员 在一个类型中,可以定义0个或多个以下种类的成员: 1)常量    常量就是指出数据值恒定不变的符号.这些符号通常用于使代码更 ...

  4. 《Programming Hive》读书笔记(两)Hive基础知识

    <Programming Hive>读书笔记(两)Hive基础知识 :第一遍读是浏览.建立知识索引,由于有些知识不一定能用到,知道就好.感兴趣的部分能够多研究. 以后用的时候再具体看.并结 ...

  5. 《CLR via C#》读书笔记(6)类型和成员基础

    6.1 类型的各种成员 在一个类型中,可以定义0个或者多个以下种类的成员: 常量 常量是在编译时设置其值并且永远不能更改其值的字段.使用常量可以为特殊值提供有意义的名称以代替数字文本,以使代码变得更容 ...

  6. Clr Via C#读书笔记---程序集的加载和反射

    #1 加载程序集 Assembly.Load: public class Assembly { public static Assembly Load(AssemblyName assemblyRef ...

  7. CLR via C#读书笔记一:CLR的执行模型

    CLR(Common Language Runtime)公共语言进行时是一个可由多种编程语言使用的“进行时”. 将源代码编译成托管模块 可用支持CLR的任何语言创建源代码文件,然后用对应的编译器检查语 ...

  8. <NET CLR via c# 第4版>笔记 第6章 类型和成员基础

    6.1 类型的各种成员 6.2 类型的可见性 public 全部可见 internal 程序集内可见(如忽略,默认为internal) 可通过设定友元程序集,允许其它程序集访问该程序集中的所有inte ...

  9. CLR via C# 读书笔记-21.托管堆和垃圾回收

    前言 近段时间工作需要用到了这块知识,遂加急补了一下基础,CLR中这一章节反复看了好多遍,得知一二,便记录下来,给自己做一个学习记录,也希望不对地方能够得到补充指点. 1,.托管代码和非托管代码的区别 ...

随机推荐

  1. springboot启动报错:Could not resolve placeholder

    SpringBoot1.5,项目启动报错: Could not resolve placeholder 很明显是找不到配置文件引起的,查看配置文件目录结构如下: 很正常呀. 完全可以加载applica ...

  2. Xcode打开playground运行很慢或者无法输出的解决办法

    学习Swift最快捷的方法就是创建playground,但有时后运行很慢或者一直显示Running,无法输出. 解决办法 关闭Xcode 在终端里执行2段代码 rm -rf ~/Library/Dev ...

  3. Mac 字典扩充包 包括 app

    https://pan.baidu.com/s/1htKUaiWZFZJGO6w9azsbsg

  4. wait();notify();简单例子

    public class Test1{ /** * @param args */ public static void main(String[] args) { new Thread(new Thr ...

  5. 浅谈vue,小程序,react基础绑定值

    最近一直在用react开发项目,碰见的问题千千万,很多,但是都殊途同源,唯一区别大的就是没有像vue的双向绑定,也没有小程序的单向方便,比如: vue   v-modal="msg" ...

  6. Python习题(分页显示)

    class Page: def __init__(self, lst, pageSize): self.lst = lst # 数据 self.pageSize = pageSize # 每页显示多少 ...

  7. 使用bison和yacc制作脚本语言(2)

    我们先来想一下语法 一般脚本语言不需要定义类型直接在赋值的时候确定 我们主要考虑一下变量的类型 a = 1; b = 1.1; c = "str"; 一般来讲,我们使用这三种类型, ...

  8. Qt 本地化(翻译)

    Qt 本地化(翻译) 翻译流程大致是这样的:首先源代码产生 ts 文件,然后送给 Qt Linguist(Qt 语言家)这个 Qt 自带的小工具进行处理产生 qm 翻译文件,最后源代码里加载这个 qm ...

  9. 如何在同一个Excel里,对两个很相似的工作簿比对出不同之处

    如何在同一个Excel里,对两个很相似的工作簿比对出不同之处

  10. 钓鱼 洛谷p1717

    题目描述 话说发源于小朋友精心设计的游戏被电脑组的童鞋们藐杀之后非常不爽,为了表示安慰和鼓励,VIP999决定请他吃一次“年年大丰收”,为了表示诚意,他还决定亲自去钓鱼,但是,因为还要准备2013NO ...