读 CLR-via-C# 总结之第七章 常量和字段

常量和字段

7.1常量

1.定义常量符号时,它的值必须能在编译时确定,编译器将常量的值保存到程序集的元数据中。这意味着只能为编译器认定的基元类型定义常量。C#也运行定义非基元,前提需要把它的值设置为Null.

  1. 由于常量值从不变化,所以通常被视为静态,为类型定义的一部分,在定义常量时将导致创建元数据。代码引用一个常量符号时,编译器会在定义常量的程序集的元数据查找该符号,提取常量值,并将值嵌入生成的IL代码中。由于常量的值直接嵌入到IL代码中,所以不需要分配内存。在生成了应用程序程序集之后,运行时根本不加载DLL程序集,可以把它从磁盘移除。在修改了常量值之后,DLL程序集需要重新编译,应用程序要获得新值也要重新编译。如果希望在运行时从一个程序集提取另一个程序集的值,那么就不应该使用常量,而是应该使用readonly字段。

7.2 字段

1.字段是一种数据成员,其中容纳了一个值类型或者一个引用类型的引用。字段修饰符有:static,默认(与类型的一个实例相关联),readonly(只能由一个构造器方法中的代码写入),volatile(看到访问这种字段的代码,编译器,CLR或者硬件就不会执行一些”线程不安全”的优化措施)

2.对于类型字段,用于容纳类型字段数据的动态内存是在类型对象中分配的,而类型对象是在类型加载一个AppDomain时创建的,通常在引用了该类型的任何方法首次进行JIT编译的时候,将类型加载到一个AppDomain中。对于实例字段,用于容纳字段数据的动态内存是在构造一个类型实例时创建的。由于字段存储在动态内存中,所以它们的值在在运行时才能获取。字段可以是任何类型,不必像常量一样局限于编译器内置的基元类型。

3.readonly只能在一个构造器方法中写入(构造器只能调用一次,也就是对象首次创建时)编译器和验证机制确保不会被其他方法写入。注意,可以使用反射来修改readonly字段。引用类型被标记为readonly时,那么不可改变的是引用,而非引用的对象。

4.C#实际上,在构造器对对象进行初始化,字段的内联(是指直接赋值来初始化,而不是通过构造器)初始化只是一种语法上的简化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种技术,最后一章总结性地介绍了数据库应用程序的性能优化和安全提高。本书适用于使用Visual C#开发Windows应用程序和Web应用程序的技术人员及编程爱好者,同时也是数据库开发人员的优秀参考书。   .NET平台是Microsoft公司推出的一套开发框架和工具,是软件开发领域非常重要的里程碑。而C#语言是一种功能强大、语法简单、面向对象和类型安全的编程语言,使用Visual C#开发数据库应用程序简单、快捷。SQL Server是一个用于各种信息管理系统、Web应用程序开发的最常用的后台数据库。   本书第1,2章分别介绍了使用Visual C#和SQL Server开发数据库应用程序的基本知识,第3章~第10章,通过开发8个完整实用的数据库应用程序,系统全面地介绍了用Visual C#和SQL Server来进行数据库应用程序开发的各种技术,最后一章总结性地介绍了数据库应用程序的性能优化和安全提高。   本书适用于使用Visual C#开发Windows应用程序和Web应用程序的技术人员及编程爱好者,同时也是数据库开发人员的优秀参考书。 Visual C#+SQL Server数据库开发与实例光盘第七章
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值