[CLR via C#]6. 类型和成员基础
6.1 类型的各种成员
在一个类型中,可以定义0个或多个以下种类的成员:
6.2 类型的可见性
在文件范围中定义类型时,可以将类型的可见性指定为public或internal。
using Systeml
using System.Runtime.CompilerServices [assembly:InternalsVisibleTo("Winterllect,publickKey=12345678....asdf")]
.....
定义类型的成员(包括嵌套类型)时,可指定成员的可访问性(accessibility)。
| CLR术语 | C#术语 | 描述 |
| Private | private | 成员只能由定义类型或任何嵌套类型中的方法访问 |
| Family | protected | 访问仅限于包含类或从包含类派生的类型 |
| Family and Assembly | 不支持 | 成员只能由定义类型、任何嵌套类型或者同一程序集中定义的任何派生类型中的方法访问 |
| Assembly | internal | 访问仅限于当前程序集 |
| Family or Assembly | protected internal | 访问仅限于从包含类派生的当前程序集或类型 |
| Public | public | 访问不受限制 |

6.4 静态类
在C#中,要用static关键字定义不可实例化的类。这个关键字只能应用于类,不能引用于结构 (值类型)。这是因为CLR总是允许值类型实例化。

6.5 分部类、结构和接口
partial这个关键字告诉C#编译器,一个类、结构或者接口的定义源代码可能分散到一个或者多个源代码文件中。
| C#关键字 | 类型 | 方法/属性/事件 | 常量/字段 |
| abstract | 表示不能构造该类型的实例 | 表示为了构造派生类型的实例,派生类型必须重写并实现这个成员 | 不允许 |
| virtual | 不允许 | 表示这个成员可由派生类重写 | 不允许 |
| override | 不允许 | 表示派生类型重写了基类型的成员 | 不允许 |
| sealed | 表示该类型不能用作基类 | 表示这个成员不能被派生类型重写,只能将该关键字应用于准备重写一个虚方法的方法 | 不允许 |
| new | 引用于嵌套类型、方法、属性、时间、常量或字段时,表示该成员与基类型中相似的成员无任何关系 | ||

internal class Employee {
//非虚实例方法
public int32 GetYearsEmployed() { ... }
//虚方法
public virtual String GenProgressReport() { ... }
//静态方法
public static Employee Lookup(String name) { ... }
}
编译器编译上述代码,会生成的程序集的方法定义表中写入三个记录项,每个记录项都用一组标识(flag)来指明该方法是实例犯法、虚方法还是静态方法。
public class Set {
private Int32 m_length = 0;
//这个重载的简便方法是非虚的
public Int32 Find(Object value) {
return Find(value,0,m_length);
}
//这个重载的简便方法是非虚的
public Int32 Find(Object value, Int32 startIndex) {
return Find(value, startIndexx, m_length - startIndex);
}
//功能最丰富的方法是虚方法,可以被重写
public virtual Int32 Find(Object value, Int32 startIndex, Int32 endIndex){
//可被重写的实现放在这里....
}
//其他方法
}
合理使用类型的可见性和成员的可访问性
[CLR via C#]6. 类型和成员基础的更多相关文章
- 重温CLR(五)类型和成员基础
类型的各种成员 类型可以定义以下种类的成员 1 常量 常量是指出数据值恒定不变的符号.这种符号使代码更易阅读和维护.常量总与类型管理,不与类型的实例管理.常量逻辑上总是静态成员. 2 字段 字段表示只 ...
- CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段
编程语言的基元类型 某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32(); // a = 0 a = 1 ...
- [Clr via C#读书笔记]Cp6类型和成员基础
Cp6类型和成员基础 成员 常量:字段(静态字段和实例字段):实例构造器:类型构造器(用于静态字段的构造):方法(静态方法和实例方法):操作符重载(本质是一个方法):转换操作符:属性(本质还是方法): ...
- 《CLR via C#》读书笔记(6)类型和成员基础
6.1 类型的各种成员 在一个类型中,可以定义0个或者多个以下种类的成员: 常量 常量是在编译时设置其值并且永远不能更改其值的字段.使用常量可以为特殊值提供有意义的名称以代替数字文本,以使代码变得更容 ...
- <NET CLR via c# 第4版>笔记 第6章 类型和成员基础
6.1 类型的各种成员 6.2 类型的可见性 public 全部可见 internal 程序集内可见(如忽略,默认为internal) 可通过设定友元程序集,允许其它程序集访问该程序集中的所有inte ...
- 【C#进阶系列】06 类型和成员基础
这些东西是基础中的基础,基本上是本书都会讲这个.但是很多东西到处都有,所以只捡了以下的这些写下来. 关于类型的可见性和可访问性 也就是public,internal这种东西,但是还是有个东西要提一下, ...
- C#基础之类型和成员基础以及常量、字段、属性
首先吐糟一下今天杭州的天气,真是太热了!虽然没有妹子跟我约会,但宅在方寸大的窝里,也是烦躁不已! 接上一篇<C#基础之基本类型> 类型和成员基础 在C#中,一个类型内部可以定义多种成员:常 ...
- [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
原文:[CLR via C#]4. 类型基础及类型.对象.栈和堆运行时的相互联系 CLR要求所有类型最终都要从System.Object派生.也就是所,下面的两个定义是完全相同的, //隐式派生自Sy ...
- 重温CLR(三)类型基础
所有类型都从System.Object派生 “运行时”要求每个类型最终都要从System.Object类型派生.也就是说,一下两个类型的定义完全一致. //隐式派生自Object class Empl ...
随机推荐
- 了解HTML5和“她”的 API (三)
Web Workers(后台线程) JavaScript是单线程的,较长的javascript运算会阻塞UI线程. web worker 是运行在后台的 JavaScript,不会影响页面的性能. 在 ...
- axWindowsMediaPlayer1获取音频长度
OpenFileDialog openFileDialog1 = new OpenFileDialog { InitialDirectory = "c:\\", Filter = ...
- index_ss hint 使用的运行计划变化对照
index_ss hint 使用的运行计划变化对照 当中 buffer 代表:当前操作中发生的内存读次数,包括一致性读和当前读 尽管 emp 表记录数不多,可是buffer 读内存的次数区别还是有点 ...
- 【网络流量最大流量】poj3281Dining
/* EK算法版本号,哦,慢.....见下文dinic版本号 ----------------------------------------- 最大的问题是网络流量问题 -------------- ...
- Eclipse4.4设备egit插件提交本地项目代码到远程仓库
一.设备egit 打开Eclipse的Marketplace.在搜索框中输入egit就可以,能够看到Eclipse4.4已经默认安装了egit,当然假设有新版本号的egit公布的话,也能够在下图上点击 ...
- 写hive sql和shell脚本时遇到几个蛋疼的问题!
错误一: Hive的where后不能用字段的别名, 错误二: hive的groupby中不能用自己定义函数,否则报错(用嵌套select取代) 错误三: 运行:$ ./hive_game_operat ...
- webpack打包avalon
webpack打包avalon+oniui+jquery 随着avalon的发展壮大,我根据CSDN的统计数字,中国前端大概有1%的人在使用avalon了. avalon的最大优势是能兼容IE6,并且 ...
- 第十七章——配置SQLServer(3)——配置“对即时负载的优化”
原文:第十七章--配置SQLServer(3)--配置"对即时负载的优化" 前言: 在第一次执行查询或者存储过程时,会创建执行计划并存储在SQLServer的过程缓存内存中.在很多 ...
- StackExchange.Redis 使用 (一)
在StackExchange.Redis中最重要的对象是ConnectionMultiplexer类, 它存在于StackExchange.Redis命名空间中.这个类隐藏了Redis服务的操作细节, ...
- WWDC 2014 Session 205/217 Extension 注意事项
基于阅读下面的内容205和217的PDF做笔记.没有深入研究. 205 Creating Extensions for iOS and OS X, Part 1 217 Creating Extens ...