要困難,我已經用處置只有做商業邏輯。例如:
public class UsingBase : IDisposable
{
protected Action end;
public UsingBase(Action start, Action end) { this.end = end; if (start != null) start(); }
public void Dispose() { if (end != null) end(); }
public void Cancel() { end = null; }
}
class HideCursor : UsingBase { public HideCursor() : base(() => Console.CursorVisible = false,() => Console.CursorVisible = true) { } }
public static void DisplayTitle(...)
{
...
using (new HideCursor())
{
//Display the title
}
...
}
雖然有些人可能認爲這是濫用語言,但我從ASP.net API獲得了這個想法。
@using (Html.BeginForm())
{
...
}
要回到你的問題
例如,如果你有類,這就需要將 關機中的一個線程,你會想到調用Dispose正常關閉 此主題?
我很喜歡它,因爲我經常使用對象來使用它,讓它處理它自己的處理。當然,如果你清楚地記錄你的邏輯,並有明確的理由來區分「優雅的停止」和「處置」,那麼這可能會奏效。
或者換句話說 - 我不想做這種沒有理由:
using (var blah = new Blah())
{
...
...
...
Blah.SpecialDispose();
}//Blah.Dispose();
因爲它會導致在使用試圖阻止確切的問題 - 人們忘記書寫的權利包裝代碼(例如最後嘗試)。
編輯:
總結。是的,業務邏輯可以完成處置。是的,Dispose可以很好地處理事情。這些是你提出的主要問題。然而,這並不必然否定,其中的Dispose作爲「最後手段」,並在它的動作更突然的可能的使用情況。這聽起來像你對你的使用案例有信心,在這種情況下繼續。如果你仍然想要反饋,我建議發佈一個更具體的與你的實際用例相關的問題。
是的,你確實有一個點。有時,對於某些用法,使用會造成很好的「濫用」。然而,我也可以說,我從「關機」實際上是對象定義/身份/每個人都知道的一部分的角度看待這個問題,而不是被遺忘的東西。 –
你知道的使用和處置利用方式的不同,你已經看了交替使用情況,你還認爲自己的使用是有效的和邏輯?除非有人發佈一些東西來改變上述情況,否則似乎你正在做出明智的決定 - 我該爭論誰? – NPSF3000