[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 ...
随机推荐
- 解决Fedora升级时nvidia显卡问题
升级到新版Fedora后登录不了gnome 小编最近升级了Fedora 20到21,结果就如之前从Fedora 19升级到20时类似,又出问题了.Fedora你到底行不行... gnome登录不了 ...
- [精华]Hadoop,HBase分布式集群和solr环境搭建
1. 机器准备(这里做測试用,目的准备5台CentOS的linux系统) 1.1 准备了2台机器,安装win7系统(64位) 两台windows物理主机: 192.168.131.44 adminis ...
- Integer比较
/** * @time 2014-06-25 * @author Cao HaiCheng * */ public class demo { public static void main(Strin ...
- Chapter06-Phylogenetic Trees Inherited(POJ 2414)(减少国家DP)
Phylogenetic Trees Inherited Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 480 Accepted ...
- centos6.5 64位 openvpn安装配置(转)
查看系统版本cat /etc/redhat-releaseCentOS release 6.5 (Final) 查看内核和cpu架构uname -rm2.6.32-431.el6.x86_64 x86 ...
- android tips—NumberPicker,DataPicker,TimePicker样式改动
在使用NumberPicker.DataPicker,TimePicker这几个控件时,非常easy出现例如以下这个界面 可是我们想要的却是以下图示的结果 改动Application.activity ...
- GCD下载图片
cell.myimage.layer.masksToBounds=YES; cell.myimage.layer.cornerRadius=cell.myimage.frame.size.wi ...
- The C5 Generic Collection Library for C# and CLI
The C5 Generic Collection Library for C# and CLI https://github.com/sestoft/C5/ The C5 Generic Colle ...
- sql 学习笔记 档
从下面的内容 3c school 1:Sql 它分为两部分: 6 2:查询 7 3:插入: 9 4:数据库更新 UPDATE 9 5:删除 DELETE 10 6:Sql TOP 子句: 10 7 ...
- 一张漫画说尽IT开发过程