我們可以使用Dispose方法而不實現IDisposable接口嗎?我們可以使用Dispose方法而不實現IDisposable接口嗎?
2
A
回答
0
即使您未執行IDisposable
,管理對象也會自動處理,IDisposable允許您處理哪些運行時不會像處理文件一樣處理,打開處理非託管代碼組件。
用於處置的對象的模式,被稱爲一個dispose圖案, 上的對象的生存期施加順序。處理模式爲 ,僅用於訪問非託管資源的對象,如文件 和管道句柄,註冊表句柄,等待句柄或指向 非託管內存塊的指針。這是因爲垃圾收集器 在回收未使用的管理對象時非常高效,但無法回收非管理對象。
如果你不想使用IDisposable模式,並希望有自己的話,我相信,因爲它一會要找出可能明顯使用了IDisposable是不推薦的方法。
2
可以命名一個方法Dispose
,並用它作爲一個普通的方法沒有任何限制:
public class MyClass {
public void Dispose() {
...
}
}
...
// using() emulation
MyClass m = null;
try {
m = new MyClass();
...
}
finally {
if (m != null)
m.Dispose();
}
但如果你想using()
語法,你必須實施IDisposable
:
public class MyNextClass: IDisposable {
protected virtual void Dispose(Boolean disposing) {
...
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
}
...
// compare this with the using() emulation in the code above
using (MyNextClass n = new MyNextClass()) {
...
}
無論如何,即使它是可能來命名一個方法Dispose
這不是一個好的p ractice surprize(並最終刺激)開發人員(包括你)誰讀你的文本;因此要麼實施IDisposable
或找到其他一些名稱爲的方法。
0
沒有人會阻止你做這件事,但它是非常糟糕的設計,因爲每個人都知道這個無可爭議的接口。如果你給這種方法有不同的含義,那麼你將設計混淆爲誰以後再看看你的代碼。也許即使你自己在幾年內不記得你爲什麼這樣做的原因。
相關問題
- 1. 如果我有一個Dispose方法,我必須實現IDisposable嗎?
- 2. 我們可以在c#中使用接口實現多態嗎?
- 3. 爲什麼Dispose()方法在我的IDisposable對象上不可用?
- 4. 可以使用靜態方法實現接口嗎?
- 5. 我們可以在jsp中實現一個接口嗎?
- 6. 如果此類沒有Dispose方法,該類如何實現IDisposable?
- 7. System.ServiceModel.ServiceHost實現IDisposable,但Dispose未公開
- 8. 實現IDisposable無Dispose函數的類?
- 9. 我們可以在目標c中使用接口和實現文件嗎?
- 10. 我可以使用比較器而不實現可比較嗎?
- 11. 我可以使用從Java實現java接口的scala類嗎?
- 12. 我可以在C#中使用子類實現接口嗎?
- 13. 沒有調用類抽象我們可以從接口實現少數(不是全部)方法嗎?
- 14. 我可以調用binarySearch方法而不實現比較器/可比較嗎?
- 15. 實現接口方法時,我應該使用@Override標記嗎?
- 16. 使用Unity和接口,我如何創建一個實現IDisposable
- 17. 我可以限制哪些類可以實現接口嗎?
- 18. 我們可以實現內部接口的任何方法在Java
- 19. 可以重載接口的實現嗎?
- 20. c#app:可以實現JSON接口嗎?
- 21. 我們不應該在Unity3D的WWW類中使用塊(實現IDisposable)嗎?
- 22. 我可以枚舉JRuby中Java接口的實例方法嗎?
- 23. 我可以在方法中使用接口嗎?
- 24. 我可以在接口方法上使用@PostConstruct嗎?
- 25. 實現FactoryPattern而不使用接口C#
- 26. 使用通用方法實現接口
- 27. 我可以用PHPUnit模擬一個接口實現嗎?
- 28. 一個接口有兩個類型參數。我可以使用兩種類型的接口來實現接口嗎,這樣它們就可以兼容了嗎?
- 29. 我可以發現JMX接口嗎?
- 30. 我們可以用HashMap的方法創建一個實例嗎
你可以將一個方法命名爲Dispose並且沒有任何限制地使用它,但是如果你想使用()'語法你必須實現'IDisposable' – 2015-02-12 06:51:24
是否有什麼特別的原因你不想實現' IDisposable'?在問這個問題之前,你是否嘗試過編譯它? – Gusdor 2015-02-12 08:28:31
我的問題是我們可以調用IDisposable接口的Dispose方法而不實現接口。例如,對於Connection對象,我們稱之爲Con.Dispose? – 2015-03-26 08:34:02