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

作者:Darren 时间:2023-02-21 17:44:22 

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

const

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

一定要赋初值

public class Student
{
   public const int age;
}

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

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

正确的应该这样写:

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

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

不可以

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

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

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

正确的应该这样写:

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;
       }
   }

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

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

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

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

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

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

public class Teacher
   {        
   }

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

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

正确的应该这样写:

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;
   }
  • 用readonly修饰的变量是运行时变量

  • 可以把运行时变量赋值给readonly修饰的变量

  • readonly修饰的变量在声明时,既可以赋初值,也可以不赋初值

  • readonly修饰的变量可以在前面加static修饰符

来源:https://www.cnblogs.com/darrenji/p/3835461.html

标签:C#,const,readonly,关键字
0
投稿

猜你喜欢

  • 关于c#中枚举类型支持显示中文的扩展说明

    2023-02-02 22:35:02
  • Android使用ContentResolver搜索手机通讯录的方法

    2021-12-28 08:33:16
  • Java实现二分查找的变种

    2023-11-07 11:26:28
  • 采用C#实现软件自动更新的方法

    2021-12-30 19:13:38
  • 基于<aop:aspect>与<aop:advisor>的区别

    2023-01-22 21:53:35
  • Android程序开发中单选按钮(RadioGroup)的使用详解

    2023-09-18 03:43:39
  • ReadWriteLock接口及其实现ReentrantReadWriteLock方法

    2023-11-24 01:46:52
  • 一文搞懂Spring中的注解与反射

    2023-11-11 11:38:18
  • Android6.0 Launcher2应用解析

    2021-10-29 19:19:43
  • 详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用

    2022-11-07 14:09:54
  • 简介Winform中创建用户控件

    2021-10-14 04:39:37
  • Java设计模式之抽象工厂模式实例详解

    2023-11-29 04:04:57
  • android虚拟键盘弹出遮挡登陆按钮问题的解决方法

    2022-03-06 15:54:54
  • Java 判断线程池所有任务是否执行完毕的操作

    2021-10-03 09:43:55
  • Android中资源文件用法简单示例

    2023-09-24 22:29:04
  • 浅谈JMeter engine启动原理

    2022-02-22 03:06:47
  • Maven+SSM框架实现简单的增删改查

    2023-11-16 17:14:38
  • 基于@RestControllerAdvice与@ControllerAdvice的区别说明

    2022-06-24 21:00:36
  • Swagger注解-@ApiModel和@ApiModelProperty的用法

    2023-02-05 23:57:48
  • C#中const用法详解

    2021-08-12 15:30:29
  • asp之家 软件编程 m.aspxhome.com