`

常量和字段

    博客分类:
  • CLR
 
阅读更多

      定义常量符号时,它的值必须能在编译时确定。确定之后,编译器将常量的值保存到程序集的元数据中。这意味着只能为编译器认定的基元类型定义常量。在C#中,以下类型都是基元类型,可以定义常量:Boolean、Char、Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、Single、Double、Decimal、String。

      由于常量的值从不变化,所以常量总被视为类型定义的一部分。换言之,常量总被视为静态成员。

      代码引用一个常量符号时,编译器会在定义常量的程序集的元数据中查找该符号,提取常量的值,并将值嵌入生成的IL代码中。由于常量的值直接嵌入代码,所以在运行时不需要为常量分配任何内存。

      将一下代码编译成一个DLL程序集

   public sealed class SomeLibraryType{

   public const Int32 MaxEntriesInList=50;   //常量总是隐式为static

   }

      然后再生成一个应用程序程序集

   public sealed class Program{

   public static void Main(){

     Console.WriteLine(SomeLibraryType.MaxEntriesInList);

      }

   }

   编译器在生成应用程序代码时,会注意到MaxEntriesInList是一个值为50的常量符号,所以会将Int32值50嵌入应用程序的IL代码中。所以在生成应用程序程序集之后,运行时根本不会加载DLL程序集,可以把它从磁盘上删除。

   这个例子清晰的展示了版本控制的问题,如果开发人员将MaxEntriesInList的值更改为1000,并且只重新生成DLL程序集,那么应用程序程序集不会受到任何影响。应用程序要获得新值,也必须重新编译。 如果希望在运行时从一个程序集提取另一个程序集中的值,那么不应该使用常量,而应该使用readonly字段。

 

      将上述DLL程序集改成如下

   public sealed class SomeLibraryType{

   public static readonly Int32 MaxEntriesInList=50;   //此处使用static是为了字段和类型关联

   }

  编译器在生成应用程序代码时,会加载DLL程序集,然后从分配给它的动态内存中提取MaxEntriesInList字段的值,而这时将不用重新编译应用程序程序集。

 

  当某个readonly字段是引用类型时,那么不可以改变的是引用,而非字段引用的对象。

分享到:
评论

相关推荐

    c# 常量和字段

    在C#编程语言中,常量和字段是两种基本的变量类型,它们在程序设计中扮演着不同的角色。常量代表不可更改的值,而字段则可以存储各种类型的数据。 常量是程序中的固定值,它的值在编译时就已经确定,并且在程序的...

    shrinker,用asm和transform api实现android r类的内联常量字段.zip

    总之,shrinker是一个强大的工具,通过ASM和transform API实现R类的内联常量字段优化,对于降低APK大小和提高应用性能有显著效果。对于任何希望优化Android应用的开发者来说,理解和使用这样的工具都是非常有价值的...

    面向对象类成员详解

    在类中,成员包括了构造函数、析构函数、方法、常量、字段、属性和索引器等。下面将详细阐述这些概念。 1. **构造函数**:构造函数是用于初始化类的新实例的特殊方法。它必须与类名相同,且没有返回类型。在C#中,...

    filemaker函数教程

    值得注意的是,FileMaker函数的参数可以包含常量和字段引用。字段引用通常以“表::字段”的格式来指定。例如,“考试::得分”表示在“考试”这个表中查找“得分”这个字段。 综上所述,FileMaker函数为数据库操作...

    C#学习阅读笔记

    六、常量和字段 * 常量是一种特殊的变量,具有不可修改的特点。 * 常量必须在声明时初始化,并且其值不能在编译时修改。 * C# 语言支持只读字段,可以用来初始化常量。 七、命名空间和类 * 命名空间是一种避免...

    框架设计 CLR Via C#第二版.part1.rar

    作为深受编程人员爱戴和尊敬的编程专家,微软.NET开发团队的顾问... 第7章 常量和字段  第8章 方法:构造器、操作符、转换操作符和参数  第9章 属性  第10章 事件 第Ⅳ部分 基本类型  第11章 字符、字符串和文本

    框架设计 CLR Via C#第二版.part2.rar

    作为深受编程人员爱戴和尊敬的编程专家,微软.NET开发团队的顾问,本书作者Jeffrey Richter针对... 第7章 常量和字段  第8章 方法:构造器、操作符、转换操作符和参数  第9章 属性  第10章 事件 第Ⅳ部分 基本类型

    C-中属性和字段(变量)的区别

    3. **常量和静态字段**:字段可以被声明为常量(使用`const`关键字)或静态(使用`static`关键字),这些特殊类型的字段具有各自的特点和用途。 ### 总结 属性和字段在C#中的区别在于,属性提供了更高级的功能,如...

    rabbitmq-javadoc

    6. **常量和字段**:RabbitMQ Java 客户端的某些类可能包含常量或静态字段,如预定义的交换机和队列名称,或者配置选项。 通过 **rabbitmq-javadoc**,开发者可以更深入地了解如何在Java应用程序中集成RabbitMQ,...

    CLR study学习文档

    在理解CLR的基础上,我们还需要掌握诸如类型基础(如基元类型、引用类型和值类型)、类和成员基础、常量和字段、方法、属性、事件、字符串、枚举类型和位标志、数组、接口、委托、泛型、自定义属性以及可空值类型等...

    面向对象程序审计PPT课件.pptx

    - **常量和字段**:常量存储不可变数据,字段存储对象的状态。 - **方法**:执行特定操作的函数。 - **属性**:提供对类中字段的访问控制,允许读写属性。 - **事件**:通知其他代码特定情况发生。 - **索引器*...

    .NET 中的 常量字段const应用介绍

    总结来说,.NET和C#中的const关键字用于创建编译时确定的常量字段。它们在内存中不占用实际空间,并且一旦定义,其值就不可更改。而readonly关键字用于创建运行时可初始化的只读字段,这些字段在被初始化后也不能再...

    易于读取和修改的代码必须的C#项目编码规范

    9. **常量和字段命名**:常量通常以全大写字母表示,单词间用下划线分隔,如`MAX_VALUE`。私有字段可以使用camelCase,但应避免在公开API中使用字段,而应使用属性。 10. **注释和文档**:良好的注释可以帮助理解...

    C#.net编程规范

    - 常量和字段变量使用 PascalCase,但静态常量全部大写,如 `public const int MAX_SIZE`。 - 局部变量和参数使用 camelCase(首字母小写)。 - 命名应清晰且具有描述性,避免使用缩写,除非是公认的缩写,如 `...

    C#代码规范 常用的代码编写规则

    - **常量和字段**:常量使用全大写字母,字段遵循相应的命名规则。 **第六章 语句** - **每行一个语句**:每个语句占一行,便于阅读和调试。 - **复合语句**:使用花括号包围复合语句,即使只有一行,提高可读性。 ...

    C#中常量和只读变量的区别小结

    3.Const可以用在字段和局部变量,readonly只可以修饰字段 您可能感兴趣的文章:C#学习笔记整理_变量等基础语法(必看篇)C#把整个文件内容读入字符串变量的方法C#中static静态变量的用法实例C#不同类型的成员变量(字段...

    c#只读字段和常量的区别,以及静态构造函数的使用实例

    在C#编程语言中,只读字段(readonly)和常量(const)是两种不同的修饰符,它们都用于表示不可更改的值,但有明显的区别。同时,静态构造函数(static constructor)是一种特殊的构造函数,它在类的任何实例创建...

Global site tag (gtag.js) - Google Analytics