23.09.5 《CLR via C#》 笔记5

第六章 类型和成员基础

  1. 类型可以定义0或多个以下成员:常量、字段、实例构造器、类型构造器、方法、操作符重载、转换操作符、属性、事件、类型
  2. 类型的可见性分为public和internal(默认)
  3. C#中,成员的可访问性分为private、protected、internal、protected internal、public;接口类型的所有成员必须是public;重写成员可访问性必须一致;从基类派生时可以放宽限制(不能收紧)
  4. 静态类(永远不会实例化)要用static关键字定义(C#),必须从Object派生,不能实现接口,只能定义静态成员,不能作为字段、方法参数或局部变量
  5. 使用partial关键字可将类型的代码分布到不同文件中(由C#编译器实现,与CLR无关)
  6. .NET Framework中的版本号包含四个部分:主版本号.次版本号.内部版本号.修订号(如xxx 2.7.1.34)
  7. CLR的方法调用指令
    1. call:可调用静态方法、实例方法、虚方法;call指令假定变量不为null(调用非静态方法时);call经常用于以非虚方式调用虚方法
    2. callvirt:可调用实例方法、虚方法;如果用来调用虚实例方法,先检查变量类型,然后以多态方式调用;发出调用的方法绝不能为null(如果是,抛出NullReferenceException异常,所以速度比call慢)
    3. 编译器调用值类型的方法时倾向使用call(因为不会为null,不需要检查并抛出异常)
    4. 设计类型时应减少虚方法数量(callvirt比call慢)
  8. 作者关于定义类型的建议
    1. 类型应该定义成sealed
    2. 数据字段应该定义成private
    3. 方法、属性和事件最好定义成private和非虚(当然有些需要公开的内容定义成public)
    4. 辅助的类型定义成嵌套类型
  9. 使用new关键字,告诉编译器该方法与基类的方法没有关系

第七章 常量和字段

  1. 常量的值必须在编译时确定;值保存在元数据中;常量被视为静态成员,而不是实例成员;运行时不为常量分配内存;不能获取常量的地址;不能以引用方式传递常量;常量只能是基元类型(和null)
  2. 字段容纳一个值类型的实例或一个引用类型的引用;字段的值在运行时才能获取
  3. CLR支持readonly字段和read/write字段;readonly字段只能在构造器方法写入
  4. 内联初始化的字段,C#实际在构造器中初始化
  5. 被标记为readonly的引用类型,不可改变的是引用,而不是引用的对象
相关推荐
奥特曼_ it5 小时前
【数据分析+机器学习】基于机器学习的招聘数据分析可视化预测推荐系统(完整系统源码+数据库+开发笔记+详细部署教程)✅
笔记·数据挖掘·数据分析
四维碎片6 小时前
QSettings + INI 笔记
笔记·qt·算法
zzcufo6 小时前
多邻国第5阶段17-18学习笔记
笔记·学习
BlackWolfSky7 小时前
鸿蒙中级课程笔记4—应用程序框架进阶1—Stage模型应用组成结构、UIAbility启动模式、启动应用内UIAbility
笔记·华为·harmonyos
中屹指纹浏览器7 小时前
指纹浏览器性能优化实操——多实例并发与资源占用管控
经验分享·笔记
了一梨8 小时前
SQLite3学习笔记5:INSERT(写)+ SELECT(读)数据(C API)
笔记·学习·sqlite
jrlong8 小时前
DataWhale大模型基础与量化微调task5学习笔记(第 3 章:大模型训练与量化_模型量化实战)
笔记·学习
Sarvartha9 小时前
Routing(路由与分支)学习笔记
笔记·学习
Yu_Lijing9 小时前
《图解HTTP》笔记与读后感(上)
网络·笔记·网络协议·http
Gain_chance9 小时前
23-学习笔记尚硅谷数仓搭建-ODS层业务全量表、增量表结构设计及数据装载脚本
数据仓库·hive·笔记·学习