c# - 关于对类的任何/所有实例成员使用只读的想法?

标签 c# .net coding-style

前言

一段时间以来,我一直在对几乎所有类字段使用 readonly 修饰符。我将它用于 List 成员、IDisposeable 成员、整数、字符串等...除了我打算更改的值类型之外的所有内容。即使我通常想在 Dispose() 上清空一个成员,我也倾向于这样做。恕我直言,不需要 if 语句来测试 null 或已处置条件的优点大大超过了“可能”多次处置对象的“潜在”麻烦。

问题

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

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

我很想听听您对以下示例类(class)的看法,一般概念是否是一种好的做法?

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(); }
    ...
}

最佳答案

在代码将成功编译的任何情况下,我都对字段使用只读。

为什么?很简单,如果一个字段引用/值突然从永不改变变为改变,它可能会违反类和消费者的微妙假设。因此,我希望收到有关该更改的警报,以便评估此新行为的影响。

关于c# - 关于对类的任何/所有实例成员使用只读的想法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1428807/

相关文章:

javascript - JavaScript 中不允许使用正则表达式

c# - 如何首先使用 EF 代码在 .SaveChanges() 期间记录所有实体更改?

.net - Linq后期处理行为

.net - 如果跨层使用 POCO + Entity Framework 而不使用数据传输对象有什么缺点吗?

coding-style - 单例和谷歌编码风格

c# - MYSQL Connector.net 连接长时间后丢失

c# - 多维数组与字典性能

c# - 普通代码的表达式树

c# - 嵌套开关?或其他检查不同条件的解决方案?

c++ - 这是什么 reinterpret_cast 约定?它比 static_cast 好吗?