ZetCode

C# readonly

最后修改于 2025 年 2 月 16 日

在本文中,我们将展示如何在 C# 中使用 readonly 关键字。 readonly 关键字用于创建不可变字段,这些字段只能赋值一次,可以在声明时或在构造函数中赋值。

readonly 关键字对于创建初始化后不应更改的字段特别有用,从而确保不可变性并提高代码安全性。

这些字段可以在声明时或类的构造函数中初始化。 初始化后,readonly 字段的值不能更改。

readonly 的基本用法

以下示例演示如何使用 readonly 关键字创建不可变字段。

Program.cs
class Program
{
    // Declare a readonly field
    private readonly int _value;

    // Initialize the readonly field in the constructor
    public Program(int value)
    {
        _value = value;
    }

    public void PrintValue()
    {
        Console.WriteLine($"Value: {_value}");
    }
}

class MainClass
{
    static void Main()
    {
        var program = new Program(10);
        program.PrintValue();
    }
}

在此程序中,_value 字段声明为 readonly 并在构造函数中初始化。 初始化后,_value 的值无法更改。

$ dotnet run
Value: 10

readonly 与 const 关键字

以下示例演示了 readonlyconst 字段之间的区别。

Program.cs
class Program
{
    // Declare a const field
    public const int ConstValue = 100;

    // Declare a readonly field
    public readonly int ReadonlyValue;

    public Program(int value)
    {
        ReadonlyValue = value;
    }
}

class MainClass
{
    static void Main()
    {
        Console.WriteLine($"Const Value: {Program.ConstValue}");

        var program = new Program(200);
        Console.WriteLine($"Readonly Value: {program.ReadonlyValue}");
    }
}

在此程序中,ConstValue 字段声明为 const,这意味着它的值必须在编译时赋值并且不能更改。 ReadonlyValue 字段声明为 readonly,这意味着它的值可以在运行时赋值,但在初始化后不能更改。

$ dotnet run
Const Value: 100
Readonly Value: 200

readonly 与引用类型

以下示例演示了如何将 readonly 关键字与引用类型一起使用。

Program.cs
class Person
{
    public string? Name { get; set; }
}

class Program
{
    // Declare a readonly field of a reference type
    private readonly Person? _person;

    public Program(string name)
    {
        _person = new Person { Name = name };
    }

    public void Show() => Console.WriteLine($"Person Name: {_person?.Name}");

    public void ChangeName(string name) => _person.Name = name;
}

class MainClass
{
    static void Main()
    {

        var program = new Program("Alice");
        program.Show();

        program.ChangeName("Bob");
        program.Show();
    }
}

在此程序中,_person 字段声明为 readonly,这意味着对 Person 对象的引用在初始化后不能更改。 但是,Person 对象的属性仍然可以修改。

$ dotnet run
Person Name: Alice
Person Name: Bob

来源

C# readonly - 文档

在本文中,我们展示了如何在 C# 中使用 readonly 关键字来创建不可变字段。 readonly 关键字是确保不可变性和提高代码安全性的强大工具。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程