热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析Const与Readonly的关键差异及应用场景

本文深入探讨了`const`和`readonly`关键字在编程中的核心区别及其具体应用场景。`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指针。

转:https://www.cnblogs.com/syringa-flz/archive/2007/04/05/700922.html



推荐阅读
author-avatar
手浪用户2602936705
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有