我能理解文章中的abiguity - 真正的答案是泥:)
清晰当涉及到Web部件开发(或者用一般的SharePoint API开发),特定对象的处置(特别是SPOM对象)将产生不可预知的结果,如果你没有正确地实例化你的对象。
特别是,如果您从当前上下文中获取SPSite或SPWeb的对象引用并尝试处理它(使用using子句或try/finally),则会从SharePoint中获取对象引用错误叠加。
处理SP对象(SPSite,SPWeb等)的正确方法是使用URL从站点实例化新SP对象(而不是使用上下文获取它)。例如:
using (SPSite siteCollection = new SPSite("http://your_site_url"))
{
using (SPWeb site = siteCollection.OpenWeb("News"))
{
//do stuff with your news web
}
}
这里,如果你尝试使用它,这将抛出一个对象引用错误的代码示例:
using(contextSite = SPControl.GetContextSite(Context))
{
using (SPWeb site = siteCollection.OpenWeb("News"))
{
//do stuff with your news web
}
}
using块过程中不会发生的错误,但会当SharePoint尝试在网站内部执行某些操作时会在较晚的下游发生。
就一般使用而言,如果你有一个IDisposable对象,那么我会非常喜欢使用()over try/finally。我选择try/finally的唯一时间是如果我需要在取消分配非IDisposable对象时执行额外的逻辑。
希望这会有所帮助!
(+1)现在肯定不太浑浊,谢谢! – vinny 2009-05-04 16:08:01