第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在C#中完成/處理模式

在C#中完成/處理模式

慕田峪4524236 2019-06-17 16:41:18
在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)使用非托管資源?
查看完整描述

3 回答

?
達(dá)令說(shuō)

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊

官方實(shí)施模式IDisposable很難理解。我相信這個(gè)是更好:

public class BetterDisposableClass : IDisposable {

  public void Dispose() {
    CleanUpManagedResources();
    CleanUpNativeResources();
    GC.SuppressFinalize(this);
  }

  protected virtual void CleanUpManagedResources() { 
    // ...
  }
  protected virtual void CleanUpNativeResources() {
    // ...
  }

  ~BetterDisposableClass() {
    CleanUpNativeResources();
  }}

更好解決辦法是制定一條規(guī)則必須為需要處理的任何非托管資源創(chuàng)建包裝類(lèi):

public class NativeDisposable : IDisposable {

  public void Dispose() {
    CleanUpNativeResource();
    GC.SuppressFinalize(this);
  }

  protected virtual void CleanUpNativeResource() {
    // ...
  }

  ~NativeDisposable() {
    CleanUpNativeResource();
  }}

帶著SafeHandle以及它的導(dǎo)數(shù),這些類(lèi)應(yīng)該是非常罕見(jiàn).

對(duì)于不直接處理非托管資源的一次性類(lèi),即使在存在繼承的情況下,結(jié)果也是強(qiáng)大的:他們不需要再關(guān)心非托管資源了..他們會(huì)簡(jiǎn)約執(zhí)行和理解:

public class ManagedDisposable : IDisposable {

  public virtual void Dispose() {
    // dispose of managed resources
  }}


查看完整回答
反對(duì) 回復(fù) 2019-06-17
  • 3 回答
  • 0 關(guān)注
  • 456 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)