在C#中完成/處理模式C#2008我在這方面的工作已經(jīng)有一段時間了,我仍然對一些問題感到困惑。我的問題如下我知道,只有在處理非托管資源時才需要終結(jié)器。但是,如果使用調(diào)用非托管資源的托管資源,還需要實現(xiàn)終結(jié)器嗎?但是,如果您開發(fā)的類不直接或間接地使用任何非托管資源,那么您能否實現(xiàn)IDisposable以便您的類的客戶端可以使用“Using語句”?實現(xiàn)IDisposable只是為了使您的類的客戶端能夠使用Using語句,這是否是可以接受的?using(myClass objClass = new myClass()){
// Do stuff here}我在下面開發(fā)了這個簡單的代碼來演示Finish/Dispose模式:public class NoGateway : IDisposable{
private WebClient wc = null;
public NoGateway()
{
wc = new WebClient();
wc.DownloadStringCompleted += wc_DownloadStringCompleted;
}
// Start the Async call to find if NoGateway is true or false
public void NoGatewayStatus()
{
// Start the Async's download
// Do other work here
wc.DownloadStringAsync(new Uri(www.xxxx.xxx));
}
private void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
// Do work here
}
// Dispose of the NoGateway object
public void Dispose()
{
wc.DownloadStringCompleted -= wc_DownloadStringCompleted;
wc.Dispose();
GC.SuppressFinalize(this);
}}關(guān)于源代碼的問題:這里我沒有添加終結(jié)器,通常情況下,終結(jié)器將由GC調(diào)用,終結(jié)器將調(diào)用Dispose。由于我沒有終結(jié)器,什么時候調(diào)用Dispose方法?是必須調(diào)用它的類的客戶端嗎?因此,我在示例中的類名為NoGateway,客戶機可以像這樣使用和處理該類:using(NoGateway objNoGateway = new NoGateway()){
// Do stuff here }當執(zhí)行到達Using塊的末尾時,是否會自動調(diào)用Dispose方法,或者客戶端是否必須手動調(diào)用Dispose方法?E.NoGateway objNoGateway = new NoGateway();// Do stuff with objectobjNoGateway.Dispose(); // finished with it我在我的NoGateway班級,等級。因為WebClient實現(xiàn)了IDisposable接口,這是否意味著WebClient間接使用非托管資源?在這方面是否有嚴格的規(guī)則可以遵循?如何知道類使用非托管資源?
在C#中完成/處理模式
慕田峪4524236
2019-06-17 16:41:18