C#中的const和readonly关键字详解

 更新时间:2022年08月03日 08:41:13   作者:Darren Ji  
本文详细讲解了C#中的const和readonly关键字,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

const和readonly经常被用来修饰类的字段,两者有何异同呢?

const

1、声明const类型变量一定要赋初值吗?

一定要赋初值

public class Student
{
    public const int age;
}

生成的时候,会报如下错:

正确的应该这样写:

public class Student
{
    public const int age = 18;
}

2、声明const类型变量可以用static修饰吗?

不可以

public class Student
{
    public static const int age = 18;
}

生成的时候,会报如下错:

正确的应该这样写:

public class Student
{
    public const int age = 18;
}

因为const默认是static。

3、运行时变量可以赋值给const类型变量吗?

不可以

    public class Student
    {
        public const int age = 18;

        public Student(int a)
        {
            age = a + 1;
        }
    }

生成的时候,会报如下错:

const类型变量是编译期变量,无法把运行时变量赋值给编译期变量。

4、const可以修饰引用类型变量吗?

可以,但只能给引用类型变量赋null值。

    public class Student
    {
        public const Teacher teacher = new Teacher();
    }

    public class Teacher
    {        
    }

生成的时候,会报如下错:

正确的应该这样写:

    public class Student
    {
        public const Teacher teacher = null;
    }

    public class Teacher
    {        
    }

readonly

1、声明readonly类型变量一定要赋初值吗?

不一定,既可以赋初值,也可以不赋初值。

以下不赋初值的写法正确:

    public class Student
    {
        public readonly int age;
    }

以下赋初值的写法也对:

    public class Student
    {
        public readonly int age = 18;
    }

2、运行时变量可以赋值给readonly类型变量吗?  

可以

以下在构造函数中给readonly类型变量赋值是可以的:

    public class Student
    {
        public readonly int age = 18;

        public Student(int a)
        {
            age = a;
        }
    }

3、声明readonly类型变量可以用static修饰吗?  

可以的

以下写法正确:

    public class Student
    {
        public static readonly int age = 18;
    }

总结

const修饰符:

  • 用const修饰的变量是编译期变量
  • 不能把运行时变量赋值给const修饰的变量
  • const修饰的变量在声明时要赋初值
  • const修饰的变量不能在前面加static修饰
  • cosnt也可以修饰引用类型变量,但一定要给引用类型变量赋null初值

readonly修饰符:   

  • 用readonly修饰的变量是运行时变量
  • 可以把运行时变量赋值给readonly修饰的变量
  • readonly修饰的变量在声明时,既可以赋初值,也可以不赋初值
  • readonly修饰的变量可以在前面加static修饰符

到此这篇关于C#关键字const和readonly的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C#利用waveIn实现声音采集

    C#利用waveIn实现声音采集

    wimm这种基于win32 api的库,完全可以直接用C#去调用,将依赖减少到最小,所以本文小编就来和大家介绍一下C#如何使用waveIn实现声音采集,感兴趣的小伙伴可以了解下
    2023-10-10
  • Unity实现打砖块游戏

    Unity实现打砖块游戏

    这篇文章主要为大家详细介绍了Unity实现打砖块游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C#在Windows上调用7-zip实现压缩文件

    C#在Windows上调用7-zip实现压缩文件

    这篇文章主要为大家详细介绍了C#如何在Windows上调用7-zip实现压缩文件,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以学习一下
    2023-10-10
  • c# winform treelistview的使用(treegridview)实例详解

    c# winform treelistview的使用(treegridview)实例详解

    这篇文章主要介绍了c# winform treelistview的使用(treegridview),本文通过实例代码给大家详细介绍,需要的朋友可以参考下
    2017-12-12
  • Unity性能优化Shader函数ShaderUtil.GetShaderGlobalKeywords用法示例

    Unity性能优化Shader函数ShaderUtil.GetShaderGlobalKeywords用法示例

    这篇文章主要为大家介绍了Unity性能优化Shader函数ShaderUtil.GetShaderGlobalKeywords用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • C#操作XML文件步骤

    C#操作XML文件步骤

    在本篇文章里小编给大家分享了关于C#操作XML文件步骤教学内容,有兴趣的朋友们可以学习下。
    2019-01-01
  • C# 调用exe传参,并获取打印值的实例

    C# 调用exe传参,并获取打印值的实例

    这篇文章主要介绍了C# 调用exe传参,并获取打印值的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 在Framework 4.0中:找出新增的方法与新增的类(一)

    在Framework 4.0中:找出新增的方法与新增的类(一)

    经常看到有同学在讨论Framework 4 的新特性,新方法,于是想写个程序找出framework4.0中新增的方法和类
    2013-05-05
  • C#实现动态生成静态页面的类详解

    C#实现动态生成静态页面的类详解

    这篇文章主要介绍了C#实现动态生成静态页面的类,结合实例形式详细分析了C#动态生成静态页面的原理与相关使用技巧,需要的朋友可以参考下
    2016-04-04
  • 基于WPF实现PDF的显示与转换

    基于WPF实现PDF的显示与转换

    这篇文章为大家详细主要介绍了如何基于WPF实现PDF的显示并转换成图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12

最新评论