c#中final与const的区别
时间: 2024-10-10 17:02:01 浏览: 42
浅谈Java中的final关键字与C#中的const, readonly关键字
在C#中,`final` 和 `const` 都用于修饰字段(变量),但它们的作用有所不同:
1. **const**: `const` 表示字段的值是在编译期间确定并且不可改变的。一旦赋值,这个字段的值在整个程序运行过程中都不会更改。它既可以修饰常量字段(静态、非实例字段),也可以修饰成员(类或结构体内部的实例字段)。例如:
```csharp
public const int MAX_VALUE = 100;
```
`MAX_VALUE` 的值只能在声明时设置,并且任何时候都不能修改。
2. **final**: `final` 主要有三种用法:
- 对于字段:表示字段的引用不可变,即对象创建后,其引用不会改变(不可作为字段初始化的目标,但可以作为方法返回值等)。这是对指针概念的一种模拟。
- 对于方法:表示该方法不可被重写,仅限于派生类的实例方法。
- 对于属性:如果属性标记为 `sealed` 和 `override`, 则表示它既不可被继承也不可被重写。
例如:
```csharp
public final class MyClass {
private readonly object obj; // 常量字段,值不可变
}
```
这里 `obj` 字段是一个只读实例字段,它的值在创建时就被固定了。
阅读全文