C#关键字
inernal关键字:internal修饰的成员称为内部成员,内部成员只有在组合(assembly)内部才可以访问,在组合外部是不可以访问的。组合由一系列包含程序调度和版本信息的文件组成。
sizeof关键字
功能:获取c#程序中数据类型占用多少个字节。格式如下
sizeof(type)
此运算符只能用于“非保护”模式代码的上下文。
lock关键字
功能:应用于多线程序中,创建一个临界区,使它在某个时刻只能被一个线程执行。格式如下:
lock(obj){
//临界区
}
obj是要寻求获得锁操作的对象。如果一个线程进入了临界区,那么第二个程序必须等待,直到第一个线程执行为止。如果加锁成功,就可以执行临街区的代码了。
readonly关键字:
功能:声明readonly在类中创建只读成员。readonly成员可以被初始化,但之后值不能再改变。常用于创建常量。如:
public static readonly int Size=10;
实际声明一个常量,不可以再改变
stackalloc关键字
功能:使用stackalloc可以在栈上分配内存,但只能用于初始化局部变量,其一般格式:
type *p=stackalloc type[size]
P指向一块足以容纳size个type类型对象的内存,但只能用于“非保护”的上下文环境中。一般说来,对象都在堆上分配(堆是一片空闲内存),很少在栈上分配,栈上分配的变量不会被自动回收,而且只有当声明它们的代码运行时才存在。使用stackalloc的唯一优点就是不用担心变量被垃圾回收器移动
const和volatile关键字
const修饰符用于声明不会发生改变的变量,这些变量必须赋予初值,因此const变量实际就是常量;例如:
const int i=10;
volatile修饰符通知编译器变量的值可能会以一种程序没明确指定的方式改变。例如:一个保存当前系统时间的变量会被操作系统自动更新,在这种情况下,没有明显的赋值语句来改变变量的内容,之所以要允许变量能被外部改变,是因为C#编译器假定,如果变量不出现在表达式的左侧,那么其值是不会改变的,因此自动优化这些特殊表达式。但如果存在执行代码外的因素如另外的执行线程,改变了变量的值,那假定就不成立。通过使用volatile你就告诉了编译器,每次访问变量就必须重新取变量的值。
abstract:标识一个可以扩展但不能被实体化得、必须被实现得类或方法;
as:一个转换操作符,如果转化失败,就返回null;
base:用于访问被派生类或构造中得同名成员隐藏的基类成员;
bool:表示布尔值的简单类型;
break:用于从loop或switch语句中推出得跳转语句;
byte:表示8位长度无符号整数的简单类型;
case:指定在switch语句中的一个标签。如果标签中指定的常量与switch表达式的值匹配,则与标签关联的语句就被执行;
catch:定义一个代码块,在特定类型异常抛出时,执行块内代码。参加try和finally;
char:表示16位Unicode字符的简单类型;
checked:既是操作符又是语句。确保编译器和运行时检查整数类型操作或转换时出现的溢出;
class:指明一个声明得类类型声明;
const:标识一个可在编译时计算出来的变量值,即一经指派不可修改得值;
continue:用于返回循环顶部的跳转语句;
decimal:表示128位高精度十进制数的简单类型;
default:在switch语句中,指定一组语句,如果前面没有匹配得case子句,就执行这些语句;
delegate:指定一个声明为一种委托类型。委托把方法封装为可调用实体,能在委托实体中调用;
do:一个条件语句,无论条件是否满足,都执行至少一次;
double:表示64位双精度浮点值得简单类型;
else:if条件语句的一部分,如果条件不为真则执行else后面的语句。
enum:表示一个已命名常量群集得值类型;
event:允许一个类或对象提供通知得成员,它必须是委托类型;
explicit:一个定义用户自定义转换操作符的操作符,通常用来将内建类型转换为用户定义类型或反向操作。必须在转换时调用显式转换操作符;
extern:标识一个将在外部(通常不是C#语言)实现的方法;
false:一个布尔字面值;
finally:定义一个代码块,在程序控制离开try代码块后执行。参见try和catch关键字;
fixed:在一个代码块执行时,在固定内存位置为一个变量指派一个指针;
float:表示32位单精度浮点值得简单类型;
for:定义一个循环语句,只要指定条件满足就继续执行;
foreach:用于遍历一个群集的元素;
goto:一个跳转语句,将程序执行重定向到一个标签语句;
if:一个条件语句,根据一个布尔表达式的值选择一个语句执行;
implicit:一个操作符,定义一个用户定义的转换操作符。通常用来将预定义类型转换为用户定义类型或反向操作。隐式转换操作符必须在转换时使用;
in:foreach语句遍历语法的一部分,被放在变量名与要遍历的群集之间;
int:表示32位带符号整数值的简单类型;
interface:将一个声明指定为接口类型,即实现类或构造必须遵循的合同;
internal:一个访问修饰符。内部代码元素只可由同一装配件内的其他类型访问。装配件可以是DDL或EXE文件;
is:比较两个对象类型得比较操作符;
lock:用在多线程程序中,为变量设置一个互斥锁(mutex);
long:表示64位带符号整数值的简单类型;
namespace:定义一个逻辑组的类型和命名空间;
new:用于调用构造器的操作符。同时,也是一个修饰符,用来隐藏而非重载拥有同样签名得一个继承方法;
null:表示引用类型中等同于0的字面值;
object:一个预定义引用类型,表示所有引用类型得终极基类。也是预定义类型System.Object的别名;
operator:用来声明或多载一个操作符;
out:标识一个参数值会受影响得参数,但在传入方法时,该参数无需先初始化;
override:一个修饰符,表明一个方法将覆载一个虚方法或抽象方法,或一个操作符将覆载基类中定义的同名操作符;
params:声明一个参数数组。如果使用,必须修改指定的最后一个参数。允许可选参数;
private:一个访问修饰符。私有成员只能在定义该成员得类型内部访问;
protected:一个访问修饰符。保护成员只能在定义该成员得类型或派生类型中的访问;
public:一个访问修饰符。公有成员可以在定义该成员得类或命名空间内外自由访问;
readonly:标识一个变量的值在初始化后不可修改;
ref:标识一个参数值可能会受影响的参数;
return:一个用于跳出方法的跳转语句。执行返回到方法调用者;
sbyte:表示8位带符号整数的简单类型;
sealed:防止类型被派生,防止方法和property被覆载;
short:表示16位带符号整数值的简单类型;
sizeof:一个操作符,以byte为单位返回一个值类型的长度;
stackalloc:返回在堆上分配的一个内存块的指针;
static:静态成员与它在其中被声明得类型相关联,而不是与类型得实体相关联;
string:一个表示Unicode字符串得预定义引用类型。是System.String预定义类型的别名;
struct:是一种值类型,可以声明常量、字段、方法、property、索引器、操作符、构造器和内嵌类型;
switch:一个选择语句,它执行与表达式匹配标签相关联的语句列表;
this:引用一个类型的当前实体;
throw:导致抛出一个异常;
true:一个布尔字面值;
try:异常处理代码块得组成部分之一。try代码块包括可能会抛出异常的代码。参阅catch和finally关键字;
typeof:一个操作符,返回传入参数的类型;
uint:表示32位无符号整数值的简单类型;
ulong:表示64位无符号整数值的简单类型;
unchecked:禁止溢出检查;
unsafe:标注包含指针操作得代码块、方法或类;
ushort:表示16位无符号整数值的简单类型;
using:当用于命名空间时,using关键字允许访问该命名空间中的类型,而无需指定其全名。也用于定义finalization操作的范围;
virtual:一个方法修饰符,标识可被覆载的方法;
void:无返回值方法的返回类型;
volatile:标识一个可被操作系统、某些硬件设备或并发线程修饰的attribute;
while:while条件语句根据条件执行一个语句零次或多次。do语句中的while部分指定循环中止条件。
组合修饰符:
修饰符 含义
无或者intermal 类只能在当前项目中被访问
public 类可以在任何地方访问
abstract或者intermal abstract 类只能在当前项目中访问,不能实例化,只能继承
public abstract 类可以在任何地方访问,不能实例化,只能继承
sealed或者internet sealed 类只能在当前项目中访问,不能派生,只能实例化
public seales 类可以在任何地方访问,不能派生,只能实例化