const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享!

  a、叫编译时常量的原因是它编译时会将其替换为所对应的值;

  b、静态常量在速度上会稍稍快一些,但是灵活性却比动态常量差一些;

  c、静态常量,隐式是静态的,即被static隐式修饰过,不能再用static重复修饰,

  d、在声明时初始化;

  e、静态常量只能被声明为简单的数据类型(内建的int和浮点型)、枚举或字符串。

  f、应用场合例如:Math.PI的定义(要声明一些从不改变且处处唯一的常量,就应该使用静态常量)

readonly:动态常量,也称运行时常量(runtime constants),属于对象级,通过对象访问。

  a、而动态常量的值是在运行时获得的;

  b、动态常量在性能上稍差一点,但是灵活性好比前者好;

  c、readonly可以被static修饰,这时的static readonly和const非常相似;

  d、在声明是初始化,在构造函数里初始化;(static readonly常量,如果在构造函数内指定初始值,则必须是静态无参构造函数;)

  e、动态常量可以是任意的数据类型。

  f、应用场合例如:SqlHelper类的连接字符串定义

二者最大的差别在于:静态常量在编译时会将其换为对应的值,这就意味着对于不同的程序集来说,当你改变静态常量的时候需要将其重新编译,否则常量的值不会发生变化,可能引发潜在的问题,而动态常量就不会有这种情况,此时推荐使用static readonly,因为其是运行时赋值,当常量值被更改,运行时也随之更改。

static:本不应该把static与前两者放在一起区别对待的,但是static经常和它们搅在一起,所有这里特别把它拿来说个事。static的意义与const和readonly迥然不同,static是指所修饰的成员与类型有关,而与对象无关。

   静态字段和静态构造方法,通常适用于于一些不会经常变化而又频繁使用的数据,比如连接字符串,配置信息等,进行一次读取,以后就可以方便的使用了,同时也节约了托管资源,因为对于静态成员,一个静态字段只标识一个存储位置。

   非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。

总结:const是编译时常量,readonly是运行时常量;cosnt较高效,readonly较灵活。在应用上以static readonly代替const,以平衡const在灵活性上的不足,同时克服编译器优化cosnt性能,所带来的程序集引用不一致问题;

基础知识---const、readonly、static的更多相关文章

  1. 如何使用C#关键字const,readonly,static

    如果有一个值不太会变化,我们经常使用const和readonly,这2者有何不同呢?有时候,我们也会在readonly之前加上关键字static,这又意味着什么呢? const ● const默认是静 ...

  2. Java基础知识整理之static修饰属性

    static 关键字,我们在开发用的还是比较多的.在<Java编程思想>有下面一段话 static 方法就是没有 this 的方法.在 static 方法内部不能调用非静态方法,反过来是可 ...

  3. 《Java基础知识》Java static关键字以及Java静态变量和静态方法

    static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态 ...

  4. C#基础知识记录一

    C#基础知识记录一 static void Main(string[] args) { #region 合并运算符的使用(合并运算符??) 更多运算符请参考:https://msdn.microsof ...

  5. 到底是 const 还是 static readonly

    真的一样? const 和 static readonly 常在程序中用来声明常量,调用方法也没有什么不同,他们真的一样吗?我们可以做个试验. 程序集内的常量 现在我们建立一个程序,里面有一个MyCl ...

  6. 【转】const和static readonly

    我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等.在多数情况下可以混用.二者本质的区别在于,const的值是在编译期间确定的,因此只能在声 ...

  7. (C#) What is the difference between "const" and "static readonly" ?

    const int a must be initialized initialization must be at compile time readonly int a can use defaul ...

  8. c#中const、static、readonly的区别

    1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...

  9. const 还是 static readonly

    到底是 const 还是 static readonly   真的一样? const 和 static readonly 常在程序中用来声明常量,调用方法也没有什么不同,他们真的一样吗?我们可以做个试 ...

随机推荐

  1. 微信小程序自定义tabbar的实现

    微信小程序自定义tabbar的实现 目的:当采用微信的自定义tabbar组件的时候,切换的时候会出现闪屏的效果:当使用微信默认的tabbar的时候,限制了tabbar的数量以及灵活配置. 方案:自己动 ...

  2. AutoresizingMask 的使用

    (1)先了解一下这几个枚举值的含义: (2)代码演说: 在viewcontroller 用代码创建一个红色的view,如下: UIView *redView = [[UIView alloc] ini ...

  3. lf 前后端分离 (1) auth,token认证

    一.关于登录验证 用户在登录的时候会通过验证以及滑动解锁,注意的是需要后端if verify(request.data): 来判断是否发送了那三个验证数据 通过 random_str=str(uuid ...

  4. fd (int)读写文件

    #include <string.h> #include <stdio.h> #include <fcntl.h> int main() { char *p1 = ...

  5. TiDB 学习资料

    学习资料 网址 官网 https://pingcap.com/docs-cn/stable/

  6. selenium 简介 及浏览器配置

    简介: Selenium是一款基于web应用程序的开源测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.Selenium是一个自动化的web应用功能测试工具. Seleniu ...

  7. LeetCode 51. N-QueensN皇后 (C++)(八皇后问题)

    题目: The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two que ...

  8. pointnet++的pytorch实现

    代码参考:https://blog.csdn.net/weixin_39373480/article/details/88934146 def recognize_all_data(test_area ...

  9. 在centos8搭建dhcp服务

    1.用这两个命令就可以安装成功 yum - y install dhcp yum -y install dhcp-server.x86_64 2.配置文件在 /etc/dhcp/dhcpd.conf ...

  10. 怎么写Java项目?

    我们通常说的Java项目也都是JavaWeb,J2ee项目;现在说的是JavaWeb. 最简单的办法 多看别人项目源码 在别人基础上修改,而现在要一点一点掰开看看. 1.立项: 要做什么东西,最后的要 ...