定义常量符号时,它的值必须能在编译时确定。确定之后,编译器将常量的值保存到程序集的元数据中。这意味着只能为编译器认定的基元类型定义常量。在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#编程语言中,常量和字段是两种基本的变量类型,它们在程序设计中扮演着不同的角色。常量代表不可更改的值,而字段则可以存储各种类型的数据。 常量是程序中的固定值,它的值在编译时就已经确定,并且在程序的...
总之,shrinker是一个强大的工具,通过ASM和transform API实现R类的内联常量字段优化,对于降低APK大小和提高应用性能有显著效果。对于任何希望优化Android应用的开发者来说,理解和使用这样的工具都是非常有价值的...
在类中,成员包括了构造函数、析构函数、方法、常量、字段、属性和索引器等。下面将详细阐述这些概念。 1. **构造函数**:构造函数是用于初始化类的新实例的特殊方法。它必须与类名相同,且没有返回类型。在C#中,...
值得注意的是,FileMaker函数的参数可以包含常量和字段引用。字段引用通常以“表::字段”的格式来指定。例如,“考试::得分”表示在“考试”这个表中查找“得分”这个字段。 综上所述,FileMaker函数为数据库操作...
六、常量和字段 * 常量是一种特殊的变量,具有不可修改的特点。 * 常量必须在声明时初始化,并且其值不能在编译时修改。 * C# 语言支持只读字段,可以用来初始化常量。 七、命名空间和类 * 命名空间是一种避免...
作为深受编程人员爱戴和尊敬的编程专家,微软.NET开发团队的顾问... 第7章 常量和字段 第8章 方法:构造器、操作符、转换操作符和参数 第9章 属性 第10章 事件 第Ⅳ部分 基本类型 第11章 字符、字符串和文本
作为深受编程人员爱戴和尊敬的编程专家,微软.NET开发团队的顾问,本书作者Jeffrey Richter针对... 第7章 常量和字段 第8章 方法:构造器、操作符、转换操作符和参数 第9章 属性 第10章 事件 第Ⅳ部分 基本类型
3. **常量和静态字段**:字段可以被声明为常量(使用`const`关键字)或静态(使用`static`关键字),这些特殊类型的字段具有各自的特点和用途。 ### 总结 属性和字段在C#中的区别在于,属性提供了更高级的功能,如...
6. **常量和字段**:RabbitMQ Java 客户端的某些类可能包含常量或静态字段,如预定义的交换机和队列名称,或者配置选项。 通过 **rabbitmq-javadoc**,开发者可以更深入地了解如何在Java应用程序中集成RabbitMQ,...
在理解CLR的基础上,我们还需要掌握诸如类型基础(如基元类型、引用类型和值类型)、类和成员基础、常量和字段、方法、属性、事件、字符串、枚举类型和位标志、数组、接口、委托、泛型、自定义属性以及可空值类型等...
- **常量和字段**:常量存储不可变数据,字段存储对象的状态。 - **方法**:执行特定操作的函数。 - **属性**:提供对类中字段的访问控制,允许读写属性。 - **事件**:通知其他代码特定情况发生。 - **索引器*...
总结来说,.NET和C#中的const关键字用于创建编译时确定的常量字段。它们在内存中不占用实际空间,并且一旦定义,其值就不可更改。而readonly关键字用于创建运行时可初始化的只读字段,这些字段在被初始化后也不能再...
9. **常量和字段命名**:常量通常以全大写字母表示,单词间用下划线分隔,如`MAX_VALUE`。私有字段可以使用camelCase,但应避免在公开API中使用字段,而应使用属性。 10. **注释和文档**:良好的注释可以帮助理解...
- 常量和字段变量使用 PascalCase,但静态常量全部大写,如 `public const int MAX_SIZE`。 - 局部变量和参数使用 camelCase(首字母小写)。 - 命名应清晰且具有描述性,避免使用缩写,除非是公认的缩写,如 `...
- **常量和字段**:常量使用全大写字母,字段遵循相应的命名规则。 **第六章 语句** - **每行一个语句**:每个语句占一行,便于阅读和调试。 - **复合语句**:使用花括号包围复合语句,即使只有一行,提高可读性。 ...
3.Const可以用在字段和局部变量,readonly只可以修饰字段 您可能感兴趣的文章:C#学习笔记整理_变量等基础语法(必看篇)C#把整个文件内容读入字符串变量的方法C#中static静态变量的用法实例C#不同类型的成员变量(字段...
在C#编程语言中,只读字段(readonly)和常量(const)是两种不同的修饰符,它们都用于表示不可更改的值,但有明显的区别。同时,静态构造函数(static constructor)是一种特殊的构造函数,它在类的任何实例创建...