[C.C++] C#中的const和readonly关键字详解

2535 0
黑夜隐士 2022-11-9 08:31:33 | 显示全部楼层 |阅读模式
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的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持中国红客联盟。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行