对于任何/所有实例成员使用readonly的想法?

csh*_*net 8 .net c# coding-style

前言

一段时间以来,我一直在几乎所有类字段中使用readonly修饰符.我将它用于List <T>成员,IDisposeable成员,整数,字符串等......除了我打算改变的值类型之外的所有东西.即使我通常想在Dispose()上取消成员,我也倾向于这样做.恕我直言不需要if语句来测试null或处理条件的优点大大超过了"可以"多次处理的对象中的"潜在"问题.

问题

你什么时候使用readonly,或者是吗?

您或您的公司是否有关于readonly使用的最佳实践和/或编码标准?

我很想听听你对以下样本课的看法,一般概念是不是很好的做法?

class FileReaderWriter : IFileReaderWriter, IDisposable
{
    private readonly string _file;
    private readonly Stream _io;

    public FileReaderWriter(string path) 
    {
        _io = File.Open(_file = Check.NotEmpty(path), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
    }
    public void Dispose() { _io.Dispose(); }
    ...
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 9

在代码成功编译的任何情况下,我都会在字段上使用readonly.

为什么?很简单,如果字段引用/值突然从不变为变化,则可能违反类和消费者中的微妙假设.因此,我想提醒这一变化,以评估这种新行为的含义.


Jon*_*eet 5

和你一样,我会readonly尽可能地使用。在可能的情况下,我也使用不可变集合。

Dispose是一个有趣的,因为它有效地将类型从“可用”转变为“不可用” - 我很想有一个非只读bool成员来表明这一点。话又说回来,我很少发现自己需要实施IDisposable. 通常,当我使用资源时,仅适用于单个方法的过程,因此我将资源设置为该方法的本地资源。