在C#中完成/處理模式C#2008我在這方面的工作已經(jīng)有一段時(shí)間了,我仍然對(duì)一些問(wèn)題感到困惑。我的問(wèn)題如下我知道,只有在處理非托管資源時(shí)才需要終結(jié)器。但是,如果使用調(diào)用非托管資源的托管資源,還需要實(shí)現(xiàn)終結(jié)器嗎?但是,如果您開(kāi)發(fā)的類(lèi)不直接或間接地使用任何非托管資源,那么您能否實(shí)現(xiàn)IDisposable以便您的類(lèi)的客戶(hù)端可以使用“Using語(yǔ)句”?實(shí)現(xiàn)IDisposable只是為了使您的類(lèi)的客戶(hù)端能夠使用Using語(yǔ)句,這是否是可以接受的?using(myClass objClass = new myClass()){
// Do stuff here}我在下面開(kāi)發(fā)了這個(gè)簡(jiǎn)單的代碼來(lái)演示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)于源代碼的問(wèn)題:這里我沒(méi)有添加終結(jié)器,通常情況下,終結(jié)器將由GC調(diào)用,終結(jié)器將調(diào)用Dispose。由于我沒(méi)有終結(jié)器,什么時(shí)候調(diào)用Dispose方法?是必須調(diào)用它的類(lèi)的客戶(hù)端嗎?因此,我在示例中的類(lèi)名為NoGateway,客戶(hù)機(jī)可以像這樣使用和處理該類(lèi):using(NoGateway objNoGateway = new NoGateway()){
// Do stuff here }當(dāng)執(zhí)行到達(dá)Using塊的末尾時(shí),是否會(huì)自動(dòng)調(diào)用Dispose方法,或者客戶(hù)端是否必須手動(dòng)調(diào)用Dispose方法?E.NoGateway objNoGateway = new NoGateway();// Do stuff with objectobjNoGateway.Dispose(); // finished with it我在我的NoGateway班級(jí),等級(jí)。因?yàn)閃ebClient實(shí)現(xiàn)了IDisposable接口,這是否意味著WebClient間接使用非托管資源?在這方面是否有嚴(yán)格的規(guī)則可以遵循?如何知道類(lèi)使用非托管資源?
在C#中完成/處理模式
慕田峪4524236
2019-06-17 16:41:18