参考类型只读属性 - 真的吗?

时间:2014-01-22 08:50:05

标签: 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
   }
}

1 个答案:

答案 0 :(得分:4)

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

class Foo
{
    public readonly Bar Bar1;
    public Bar Bar2 { get; } 
    ...
}

您仍然可以说f.Bar1.Prop = 1;,但由于readonly您无法f.Bar1 = null;。对于Bar2来说也一样。