Const 与 readonly的区别

const

       用于修改字段或局部变量的声明。它指定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数。

       备注:

              常数声明可以声明多个常数,例如:

                     public const double x = 1.0, y = 2.0, z = 3.0;

              不允许在常数声明中使用 static 修饰符。隐式地为静态的

              只能在声明中赋值,且只能是常数或常数表达式,例如:

                     public const int c1 = 5.0;

                     public const int c2 = c1 + 100;

readonly

       readonly 关键字是可以在字段上使用的修饰符。当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分发生,或者发生在同一类的构造函数中。

       只能在下列上下文中进行只读字段的赋值:

       当在声明中初始化变量时,例如:

       public readonly int y = 5;

       对于实例字段,在包含字段声明的类的实例构造函数中;或者,对于静态字段,在包含字段声明的类的静态构造函数中。只有在这些上下文中时,将 readonly 字段传递为 out ref 参数才有效。

Const readonly的区别:

       const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值          

       const 字段是编译时常数,readonly 字段可用于运行时常数,如下例所示:

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

       const 不能与static一起始用,而readonly可以。

static

       使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static 修饰符可用于字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类型(2.0中可以)

       备注:

              (1)常数隐式地是静态成员。

              (2)不能通过实例引用静态成员。只可以通过类型名称引用它。例如,请考虑以下类:

                     public class MyBaseC

                     {

                          public struct MyStruct {

                               public static int x = 100;

                          }

                     }

              若要引用静态成员 x,请使用完全限定名(除非可从相同范围访问):

                     MyBaseC.MyStruct.x

              (3)每个静态字段只有一个副本,不管有多少个类的实例,它们共享一个副本。

              (4)不可以使用 this 引用静态方法或属性访问器。 因为没有this指针。

posted on 2007-04-05 10:53  散步的蠕虫  阅读(356)  评论(0编辑  收藏  举报

导航