C#学习笔记(二十九) 常量const修饰符 只读readonly修饰符

常量 const
常量是指变量在生命周期内值不会发生变化。常量可以修饰字段和局部变量。
常量必须在声明时初始化。赋值后就不能再被改写。
赋值给常量的值必须是常量,即确定的值,不能将变量赋值给常量。
常量总是隐式静态的,但是常量不能被static修饰。

    class Program
    {
        const int age = 1;//常量字段
        static void Main()
        {
            const int age = 5;//局部常量

            Console.WriteLine($"age's type is {Program.age}");
            Console.WriteLine($"age's type is {age}");
        }
    }

readonly 修饰符  
readonly可以修饰字段,但是不能修饰局部变量,其作用和const类似,一旦值被设定就不能修改。  

namespace ConsoleApp1
{
    class Program
    {

        static void Main()
        {
            Readonlyclass readonlyclass = new Readonlyclass();
            readonlyclass.WriteLine();
        }
    }

    public class Readonlyclass
    {
        static readonly string staticField;
        readonly string field;

        static Readonlyclass()
        {
            //当声明值类型时,它会经历默认初始化,其中所有值类型字段均设置为零,所有引用类型字段都设置为 null 。 
            //仅保证在调用类型的实例构造函数或静态成员之前运行显式静态构造函数。 
            //因此,如果创建类型时未调用实例构造函数,则不保证静态构造函数运行。
            staticField = "StaticField";
        }
        public Readonlyclass()
        {
            field = "Field";
        }

        public void WriteLine()
        {
            Console.WriteLine($"staticField is {staticField}");
            Console.WriteLine($"Field is {field}");
        }
    }
}

不可变的类型

如果类型包含可以改变的成员,他就是可变的类型。
如果对象没有任何可以改变的成员,只有只读成员,它就是不可变类型。不可变类型的成员只能在初始化时设置。
不可变类型的的一个例子就是String类。

 

readonly字段 和 const字段的区别
1.const字段只能在字段的声明语句中初始化;readonly字段可以在字段的声明语句中初始化,实例readonly字段可以在实例构造函数中初始化,静态readonly字段必须在static构造函数中初始化。  
2.const字段的值必须在编译器确定,而readonly字段可以在运行期通过调用不同的构造函数来确定。  
3.const字段类似于静态字段,而且没有储存位置;readonly字段可以是实例或者静态字段,且有储存位置。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值