天天看点

C# 修饰符

const : 指定字段或者本地变量不能被修改。

readonly : 声明一个字段只能在定义的时候赋值或者在构造函数中赋值。

( readonly 可以有不同的值,取决于构造函数的值。 const 是一个编译时的常量,readonly是一个运行时的常量,example:

public static readonly unit l1 = (uint) DateTime.Now.Ticks; )

event : 指定一个事件

(用于创建或者标识一个托管, 必须用+=或者-=对托管进行操作)

extern : 表明方法是在外部实现的, 特别是用其它语言实现的, 它没有具体实现。

它一般与DllImport 属性联用,但用DllImport时,方法申明必须为static的。

(public static extern int MyMethod(int x); )

(

[DllImport("User32.dll")]

public static extern int MessageBox(int h, string m, string c, int type);

)

sealed : 声明一个类不能被继承。

( 结构体是隐性的sealed, 因而,它不能被继承 )

unsafe : 声明一段不安全的内容。要编译不安全的代码,必须加 /unsafe 编译选项。

( 它表示一段不安全的内容,可以进行指针的操作)

( unsafe static void FastCopy(byte[] src, byte[] dst, int count ) {} )

它可以这样用:unsafe static void FastCopy( byte *ps, byte *pd, int count) {}

unsafe static void SquarePtrParam(int *p)

{

 *p *= *p;

}

unsafe public static void Main()

  int i = 5;

  SquarePtrParam(&i);

  Console.WriteLine(i);

volatile : 表明一个字段可以被操作系统,硬件,或者并发的线程修改

当系统用到该值时,系统总是读volatile的对象中的值。尽管它可能前面用到过,不会缓存起来。

它经常被用在多线程在没有用到lock的时候访问。它保证每个线程读到最新的数据(有可能被其它线程修改)