引用类型只读属性 - 真的吗?

Par*_*tel 1 c#

在我的 DDD 模式中,我将 SqlConnection 只读属性公开给我的 DAL 类对象。但是由于 SqlConnection 是引用类型,我仍然可以调用 .Dispose() 方法,即使它是只读的。

同样的事情发生在 List<> 上,我通过将其转换为 ReadOnlyCollection 来解决,但我碰巧使用许多其他核心 .NET 引用类型对象作为只读属性,并且无法创建包装类。

任何决议?

添加代码:

public class DbContext
{
    public SqlConnection sqlConnection {get; private set; }
}

public class caller
{
   public caller()
   {
       var dbContext = new DbContext();
       dbContext.sqlConnection.Dispose(); // Want to hide Dispose() method
   }
}
Run Code Online (Sandbox Code Playgroud)

Hen*_*man 5

readonly修饰符仅适用于参考,而不是实际的实例(被引用)。

class Foo
{
    public readonly Bar Bar1;
    public Bar Bar2 { get; } 
    ...
}
Run Code Online (Sandbox Code Playgroud)

你仍然可以说f.Bar1.Prop = 1;但因为readonly 你不能做f.Bar1 = null;。Bar2 也是如此。