本文详细讲解了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#中的const和readonly关键字详解
				
        
 
            
        
             猜你喜欢
        
	     - WPF使用DrawingContext实现绘制刻度条 2023-07-04
 - Unity Shader实现模糊效果 2023-04-27
 - c# 模拟线性回归的示例 2023-03-14
 - .NET CORE DI 依赖注入 2023-09-27
 - 如何使用C# 捕获进程输出 2023-03-10
 - Oracle中for循环的使用方法 2023-07-04
 - C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
 - user32.dll 函数说明小结 2022-12-26
 - Unity3D实现渐变颜色效果 2023-01-16
 - 在C# 8中如何使用默认接口方法详解 2023-03-29
 
						
						
						
						
						
				
				
				
				