C#中const,readonly和static关键字的用法介绍

 更新时间:2022年8月27日 15:36  点击:55 作者:Darren Ji

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

const

  • const默认是静态的,可以通过"类名.字段名"来访问。
  • const变量只能在声明的时候赋值,不能在构造函数中为const类型变量赋值。
  • 一旦程序集被编译,const变量会被写进程序集的IL代码中。如果想修改const变量值,必须在修改值后再重新生成程序集。
  • const是编译期变量

    public class Test
    {
        public const int defaultValue = 10;
        //这里报错:因为不能在构造函数内为const变量赋值
        public Test()
        {
            defaultValue = 1000;
        }
    }

以上,
可以通过Test.defaultValue来获取变量defaultValue的值。
在Test构造中为defaultValue赋值会报错,只能在声明defaultValue的时候赋初值。

readonly

readonly默认是实例变量,只能通过"对象实例.字段名"来访问。
readonly变量可以在声明的时候或在构造函数内赋值。
如果想改变readonly变量值,只需要在声明变量或构造函数内修改,不需要重新生成程序集。
readonly是运行时变量

    class Program
    {
        static void Main(string[] args)
        {
            Test test = new Test();
            Console.WriteLine(test.rdValue);
            Console.ReadKey();
        }
    }
    public class Test
    {
        public readonly int rdValue;
        public Test()
        {
            this.rdValue = 100;
        }
        //这里报错:因为只能在声明变量或构造函数内对readonly变量赋值
        public int RDVaue
        {
            get { return rdValue; }
            set { rdValue = value; }
        }
    }

以上,
通过Test类的实例来获取readonly变量值,test.rdValue。
在RDValue属性中为readonly变量rdValue赋值会报错。

如果在readonly之前加上static关键字:

此时的readonly变量只能在声明变量的时候赋值
此时的readonly变量可以通过"类名.字段名"来访问
此时的readonly变量变成了编译期变量

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Test.rdValue);
            Console.ReadKey();
        }
    }
    public class Test
    {
        public static readonly int rdValue=100;
    }

以上,
只能在声明static readonly变量rdValue的时候赋值。 
通过Test.rdValue来访问static readonly变量。

总结:const是静态的、编译期变量,只能在声明变量的时候赋值;readonly是运行时变量,可以在声明的时候或在构造函数内赋值。当在readonly前加上关键字static,变成static readonly后,此时的static readonly变量就变成了静态的、编译期变量。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对猪先飞的支持。如果你想了解更多相关内容请查看下面相关链接

原文出处:https://www.cnblogs.com/darrenji/p/3914078.html

相关文章

  • C#中new的几种用法详解

    本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • c# 三种方法调用WebService接口

    这篇文章主要介绍了c# 三种方法调用WebService接口的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-07
  • C#实现简单的Http请求实例

    这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
  • InterlliJ IDEA2020新建java web项目找不到Static Web的解决

    这篇文章主要介绍了InterlliJ IDEA2020新建java web项目找不到Static Web的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-02
  • C#中list用法实例

    这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#实现跨线程操作控件方法

    这篇文章主要介绍了C#实现跨线程操作控件方法,主要采用异步访问方式实现,需要的朋友可以参考下...2020-06-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • C# List 排序各种用法与比较

    这篇文章主要介绍了C# List 排序各种用法与比较的相关资料,需要的朋友可以参考下...2020-06-25
  • C#中静态方法和实例化方法的区别、使用

    这篇文章主要介绍了C#中静态方法和实例化方法的区别、使用,文中讲解的非常细致,对大家的学习有所帮助,感兴趣的朋友可以了解下...2020-06-25
  • 解析C#自定义控件的制作与使用实例的详解

    本篇文章是对C#中自定义控件的制作与使用实例进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • C#创建自定义控件及添加自定义属性和事件使用实例详解

    这篇文章主要给大家介绍了关于C#创建自定义控件及添加自定义属性和事件使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
  • 简单实现C#窗体程序判断是否闰年

    这篇文章主要介绍了简单实现C#窗体程序判断是否闰年的相关代码,禁止窗体调整大小,关闭窗体前的判断,感兴趣的小伙伴们可以参考一下...2020-06-25
  • c#中WebService的介绍及调用方式小结

    这篇文章主要给大家介绍了关于c#中的WebService及其调用方式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • c#中switch case的用法实例解析

    这篇文章主要介绍了c#中switch case的用法实例解析,对于C#的初学者来说有必要熟练掌握,需要的朋友可以参考下...2020-06-25
  • C#实现简单的登录界面

    我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
  • C#开启线程的四种方式示例详解

    今天小编就为大家分享一篇关于C#开启线程的四种方式示例详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-25
  • C#编程总结(六)详解异步编程

    本篇文章主要介绍了C#异步编程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。...2020-06-25
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25