我有以下课程:
public class SqlCeEventStore: EventStore
{
private EventStoreDB db;
public SqlCeEventStore(EventStoreDB db)
{
this.db = db;
}
public void Dispose()
{
db.Dispose();
}
}我的问题是:在类的EventStoreDB方法中配置Dispose是否正确,因为它是在构造函数中传递给它的(因此,可以想象,在释放类之后可以重用它)?
也就是说,如果我处理它,我要求我的类的正确用法是:
using (var store = new SqlCeEventStore(new EventStoreDB)){
{
//...
}但我可以看到有人在用这个替代电话:
using (var db = new EventStoreDB())
using (var store = new SqlCeEventStore(db))
{
//...
}在这种情况下,我不应该从EventStoreDB类中释放SqlCeEventStore。
这种风格和另一种风格有什么争论吗?我想选一个并坚持下去,我宁愿不抛硬币:)
发布于 2011-09-24 06:40:20
一般来说,这是没有规则的,但是是的,我同意,由于对象是在您的作用域之外创建并传递给您的,所以您不拥有它。
如果您已经创建了它,那么您应该完全有权做任何您喜欢做的事情(记录调用者的预期行为)。
这是经典的合成与聚集材料。
发布于 2011-09-24 06:35:12
如果EventStoreDB属于SqlEventStore (即是其组成的一部分),则应由SqlEventStore类构造或合并。
如果它的使用超出了SqlEventStore生存期的范围,那么它应该由外部代码创建和处理。
发布于 2011-09-24 06:35:17
这里没有一般的规则,而国际水文学组织也不应该有这样的规则。不同的对象有不同的生命周期,最普遍的指导方针是确保对象按照其生命周期进行一致的管理,并且寿命尽可能短。
您可以尝试使用以下指导方针(但在需要时不要害怕偏离):在分配对象时在相同范围内释放对象。这个准则适用于许多场景,这正是using语句简化的地方。
如果你有一个没有明显处置点的长寿物体,别担心。这很正常。然而,问问你自己:我真的需要这个物体活多久?还有其他方法可以让我的寿命缩短吗?如果您能找到另一种缩短寿命的方法,这通常会使对象更易于管理,并且应该是首选的。
但是,这里也没有“一条真正的规则”。
https://stackoverflow.com/questions/7537425
复制相似问题