const 常量字段使用方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project5_42
{
    class Program
    {
        static void Main(string[] args)
        {
            ConvertUnits cu = new ConvertUnits();
            //const修饰的字段在编译时自动编译为static类型字段,可以直接通过类名来访问,
            //但是在声明显示声明为为static则会导致编译失败
            Console.WriteLine(ConvertUnits.CupsPerGallon);

        }
    }
    class ConvertUnits
    {
        public const float CentimetersPerInch = 2.54F;
        public const int CupsPerGallon = 16;
        //const类型的字段声明时不能声明为static
        //public static const  float PI=3.141592654F;
    }
}

public常量应该恒定不变,因为一个程序集引用了另一个程序集中的常量,常量将直接编译到引用程序集中,当被引用的程序集中的常量发生变化之后如果没有

进行重新编译,引用程序集中的常量将还是原始值。”

对上面的一段话在VS2013中进行了验证,包括在同一个解决方案中创建一个dll项目和一个引用此dll的项目,以及在一个工程中创建dll项目而在另一个项目中引用,在只编译dll项目而不编译引用dll的项目的情况下,dll项目中对常量做出的更改仍能正确反映到引用项目中,而并没有出现作者提到的问题。但是为了避免万无一失,最好还是避免这样的使用方法,而是采用作者下面提到的使用readonly字段。

将来可能产生改变的值应该指定为readonly,不要定义为常量。

readonly修饰符只能用于字段,用来指出字段值只能从构造器中更改,或者直接在声明时制定。与const用法的区别就是const适合用在类似圆周率,阿伏伽德罗常数等不变的量,而readonly是在构造函数中进行初始化的,每个实例的readonly字段都可以不同,区别在于readonly字段可以在执行时进行赋值,而const只能在编译时进行赋值。readonly字段需要在构造函数中进行初始化,所以编译器要求readonly字段可以在属性外部进行访问,但是除了这个特例之外,不要从除了包容属性之外的任何地方访问属性的支持字段。

C#常量字段的更多相关文章

  1. android官方技术文档翻译——Case 标签中的常量字段

    本文译自androd官方技术文档<Non-constant Fields in Case Labels>,原文地址:http://tools.android.com/tips/non-co ...

  2. idea设置方法或常量字段上浮显示对应的注释内容

    1.进入idea中,如下图进入设置 如图勾选并设置显示延迟时间 打开文件进行鼠标移动测试 可以看到鼠标移动到字段常量或方法上时显示了对应的注释类容

  3. C#学习笔记——常量、字段以及事件

    一 常量与字段 (一) 常量 常量总是被视为静态成员,而不是实例成员.定义常量将导致创建元数据.代码引用一个常量时,编译器会在定义常量的程序集的元数据中查找该符号,提取常量的值,并将值嵌入IL中.由于 ...

  4. 破解C#的readonly只读字段

    破解C#的readonly只读字段 目录 请允许我再唠叨几句const和readonly 修改readonly字段: 计策1:反间计 -- 反射修改 计策2:借刀杀人--调节字段偏移位置的结构体来修改 ...

  5. Programming C#.Classes and Objects.只读字段

    只读字段 当字段声明中含有 readonly 修饰符时,该声明所引入的字段为只读字段.给只读字段的直接赋值只能作为声明的组成部分出现,或在同一类中的实例构造函数或静态构造函数中出现.(在这些上下文中, ...

  6. c#中常量、ReadOnly和Static ReadOnly的差异

    不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: http://www.arungudelli.com/tutorial ...

  7. C#学习-字段

    字段的定义由3部分组成,访问修饰符.字段的类型和字段的名称.以下是 public class Person { //姓名,类型为字符串类型 private string name; //年龄,类型为i ...

  8. #region 常量和静态变量静态类readonly

    #region 常量和静态变量静态类readonly //---------------------------------------------------------------------- ...

  9. const与readonly常量

    const与readonly常量 const与readonly都是用来定义常量,但是它们有什么区别呢? 下面我们来简要的说明一下: const修饰的常量是编译时常量,如:public const St ...

随机推荐

  1. opencv 通过摄像头捕捉头部

    code: #include <opencv\cv.h> #include <opencv\highgui.h> #include <opencv\cxcore.h> ...

  2. 传统XmlDocument操作

    需要引用的命名空间: using System.Xml; 常用的类:XmlDocument.XmlElement.XmlNode.XmlNodeList 一.使用XmlDocument创建xml // ...

  3. java 学习基础学习单词及java关键词

    在JAVA学习中我们难免会犯一些逻辑错误,语法错误,和一些运行错误,对于英语不好的人,就的记下下面的2常用单词,有助于我们提高在使用软件编写代码的速度和代码调试,能更便捷的找出错误,知道1中的保溜关键 ...

  4. Nginx开发从入门到精通

    nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解nginx模块 的开发以及它的内部原理,但是国内却没有一本关于这方面的 ...

  5. Project Management - 3) Manage Your Meetings

    1. 取消没有价值的会议 会议是有代价和成本的 不要举行顺序式的多人进度报告会议 eg: 这周做了什么,下周还要做什么? 除了发言人和项目经理外,每个人都会觉得无聊. 这种会议是在拖项目的后腿,赶紧停 ...

  6. BZOJ 1927: [Sdoi2010]星际竞速 费用流

    1927: [Sdoi2010]星际竞速 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  7. listview自定义背景以及item自定义背景

    item向自定义背景,可以根据position来设置不同的背景. listview背景设置是需要注意设置下面这几项: //点下时整个页面的背景 android:cacheColorHint=" ...

  8. Windows ICS 服务无法启动问题解决

    防火墙打不开肯定是"windows Firewall"服务没有启动.ICS服务启动不了能够通过下面方法解决: 1.找到本地连接,单击左键--属性--共享--勾选(√)--确定,如以 ...

  9. 匿名内部类new Runnable()

    匿名内部类(Anonymous Inner Class),在创建实例的同时给出类的定义,所有这些在一个表达式中完成. Java code? 1 2 3 4 Runnable rn = new Runn ...

  10. pomelo 开发环境搭建

    开发前提条件:  Windows系统,请确保你的Windows系统包括源代码编译工具.Node.js的源代码主要由C++代码和JavaScript代码构成,可是却用gyp工具来做源代码的项目管理,该工 ...