七问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

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

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

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

public class Student
    {
        public readonly int age;
    }

以下赋初值的写法也对:

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

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

--可以

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

public class Student
    {
        public readonly int age = 18;

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

7、声明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

时间: 2024-10-27 02:06:32

七问C#关键字const和readonly的相关文章

C#关键字 const与readonly

====const==== const关键字来声明某个常量字段或常量局部变量.常量字段和常量局部变量不是变量而且不能修改.常量可以为数字.布尔值.字符串或null引用. 常数声明的类型指定声明引入的成员类型.常量局部变量或常量字段的初始值设定项必须是一个可以隐式转换为目标类型的常量表达式. 常数表达式是编译时可被完全计算的表达式.因此,对于引用类型的常数,可能的值只能是string和null. 不允许在常数声明中使用static修饰符. ====readonly==== readonly关键字是

C#基础知识七之const和readonly关键字

前言 不知道大家对const和readonly关键字两者的区别了解多少,之前真不是很清楚,如果你也不是很清楚的话,那就一起来探讨吧!探讨之前我们先来了解静态变量和动态变量. 静态变量 所谓静态变量就是在编译期间会对变量进行解析,再讲常量的值替换成初始化的值.定义时必须初始化. 动态变量 所谓动态变量就是编译期间会将变量标示只读常量,而不用常量的值代替,定义时可以不初始化,可以延迟到构造函数. const和readonly

深入探讨C#中的const、readonly关键字

首先不可否认,这些在面试上会经常被面试官问起,但是你回答的让面试官满意吗?当然如果你知道了这些原理,或许你就不 怕了.既然说到了原理,我们还是从MSDN说起. 一:值得推敲的几个地方 1.先来看看msdn上面对const是怎么说的,我们会看到.不能修改,编译时常量这些关键性信息. Q:  const为什么不能被修改. A:这个很简单,很多教科书上面都说,当编译器编译时,会将常量的值保存在该程序集的元数据中,下面我们做个实例 看一看. ①:新建一个projectA. 代码如下: // Projec

c# const与readonly 关键字的比较

C#中,const 与readonly是两个比较有用的关键字.const 与 readonly 定义的数据成员在初始化都不能再改变. 比如定义了public class MathUtitlity    {        public const double PI = 3.14;        public readonly double E = 2.782; } class Program {        static void Main(string[] args) {          

C#基础 const和readonly关键字

静态常量 所谓静态常量就是在编译期间会对变量进行解析,再将常量的值替换成初始化的值.动态常量 所谓动态常量就是编译期间会将变量标记只读常量,而不用常量的值代替,这样在声明时可以不初始化,可以延迟到构造函数初始化. const和readonly 区别 const修饰的常量是上述中的第一种,即静态常量,而readonly是上述中第二种即动态常量.他们的区别可以从静态常量和动态常量的特性来说明:const修饰的常量在声明时必须初始化值:readonly修饰的常量可以不初始化值,且可以延迟到构造函数.c

[c#] const 与 readonly

c# 中 const 与 readonly 关键字看似相同,实则不同.重点在于确定值的时间. const const 很简单,就是一个常量,不可以被 static 修饰,因为被 const 修饰的字段自动成为静态字段,其值是在编译时可以确定的. readonly readonly 可以修饰实例字段(不被 static 修饰的字段),也可以修饰静态字段(被 static 修饰的字段).意指为"只读".其值确定的时间在类的构造函数中. 总结 关键字 确定值的时机 const 编译时 rea

const和readonly你真的懂吗?

第二遍文章我打算把const和readonly的区别拿出来讲下,因为写代码这么久我都还没搞清楚这两者的区别,实在有点惭愧,所以这一次我打算搞清楚它. 定义 来看看MSDN的解释: readonly:readonly关键字是可以在字段上使用的修饰符.当字段声明包括readonly修饰符时,该声明引入的字段赋值只能作为声明的一部分,或者出现在同一类的构造函数中. const:使用 const 关键字来声明某个常量字段或常量局部变量. 常量字段和常量局部变量不是变量并且不能修改. 太多理论的讲解有些人

const和readonly差别

我们都知道,const和static readonly的确非常像:通过类名而不是对象名进行訪问,在程序中仅仅读等等.在多数情况下能够混用.二者本质的差别在于,const的值是在编译期间确定的,因此仅仅能在声明时通过常量表达式指定其值.而static readonly是在执行时计算出其值的,所以还能够通过静态构造函数来赋值.明确了这个本质差别,我们就不难看出以下的语句中static readonly和const是否能互换了: 1. static readonly MyClass myins = n

C# 总结const、 readonly、 static三者区别:

总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编译时常量的原因是它编译时会将其替换为所对应的值: b.静态常量在速度上会稍稍快一些,但是灵活性却比动态常量差一些: c.静态常量,隐式是静态的,即被static隐式修饰过,不能再用static重复修饰, d.在声明时初始化: e