變量userManager
和signInManager
都是可以實例化的類級別實例成員,或者可以爲空。清理處理方法中的類級別變量
它是安全的替代這樣的:
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (this.userManager != null)
{
this.userManager.Dispose();
this.userManager = null;
}
if (this.signInManager != null)
{
this.signInManager.Dispose();
this.signInManager = null;
}
}
base.Dispose(disposing);
}
與此:
protected override void Dispose(bool disposing)
{
if (disposing)
{
this.userManager?.Dispose();
this.signInManager?.Dispose();
}
base.Dispose(disposing);
}
個人而言,我沒有看到他們處置後明確地分配變量空的點,因爲它們是不是靜態的,據我所知,它什麼都不做。
Dispose()方法可能會被多次調用。在某些情況下,這是非常普遍的,從Stream派生的類。它仍然有效嗎?如果它不那麼它是不安全的。 –
我想'''只是一個語法糖。可能會生成與上面相同的代碼。至於分配null:這是一個很好的問題。這對GC有什麼影響嗎? (我很好奇,但我猜它確實如此,尤其是如果你的班級有終結者) – ziya
'null'變量刪除對象之間的引用,因此理論上重新使用GC - 更小的圖形,更少的週期,更少的機會不必要的升級到gen + 1等 - 但除非你擁有無數的這些對象,除非你經常創建&gc,否則你可能不會注意到性能的差異。我個人喜歡''null'它們只是爲了讓'Disposed'狀態更加獨特 - 當所有伴隨對象拋出時拋出'ObjectDisposedExcpt',OTOH'NullReferenceExcpt'保證。但那取決於..有時候nullreference是誤導 – quetzalcoatl