const和readonly的区别?
时间: 2024-05-24 15:14:06 浏览: 14
const和readonly都用于声明只读的常量,但是它们的使用场景略有不同。
const可以用于任何数据类型,包括基本数据类型、对象、数组等,它们的值在声明时就必须被初始化,并且不能被修改。
readonly只能用于类中的成员变量和属性(字段),它们的值可以在声明时初始化,也可以在构造函数中初始化,但是不能在其他方法中修改,即使是该类的实例对象也不能修改。
另外,const定义的常量是在编译时就定下来的,它们的值将直接硬编码到使用它们的代码中,而readonly定义的常量则是在运行时动态计算得出的。
相关问题
c# const readonly
在 C# 中,有两种用于声明常量的关键字:`const` 和 `readonly`。这两个关键字的作用相似,都是用来创建不可修改的常量。然而,它们之间有一些重要的区别。
使用 `const` 关键字声明的常量必须在声明时进行初始化,并且不能在程序运行过程中更改其值。这意味着 `const` 常量的值在编译时就确定了,并且在运行时是不可变的。例如:
```csharp
public const int MyConstant = 10;
```
另一方面,使用 `readonly` 关键字声明的常量可以在构造函数中进行初始化,并且可以在运行时更改其值。这意味着 `readonly` 常量的值是在运行时确定的,但只能在构造函数或初始化器中进行更改。例如:
```csharp
public readonly int MyReadOnlyConstant;
public MyClass()
{
MyReadOnlyConstant = 20;
}
```
总结来说,`const` 常量是编译时常量,其值在编译时确定;而 `readonly` 常量是运行时常量,其值在运行时确定,并且可以在构造函数中进行初始化和更改。
Attempt to assign to const or readonly variable
这个错误提示是因为你试图对一个被定义为 `const` 或 `readonly` 的变量进行赋值操作,而 `const` 和 `readonly` 的变量是不可被重新赋值的,只能被赋值一次。如果需要改变其值,应该使用 `let` 或 `var` 来定义变量。
以下是一个例子,可以帮助你更好地理解这个错误:
```
const num = 5;
num = 10; // 尝试对 const 变量进行赋值,会报错
```
正确的写法应该是使用 `let` 或 `var` 来定义变量:
```
let num = 5;
num = 10; // 正确,可以对 let 变量进行赋值操作
```
另外,如果你的代码中定义了一个对象,即使它是用 `const` 或 `readonly` 定义的,你仍然可以修改该对象的属性或方法,因为对象本身是一个引用类型,变量存储的只是该对象的引用地址,而不是对象本身的值。以下是一个例子:
```
const obj = { name: "Tom", age: 20 };
obj.age = 25; // 可以修改对象的属性
```
但是,如果你尝试给该对象重新赋值,就会出现上述错误:
```
const obj = { name: "Tom", age: 20 };
obj = { name: "Jerry", age: 22 }; // 尝试对 const 变量进行赋值,会报错
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)