IDisposable的另類用法

2022-01-13 07:03:50 字數 933 閱讀 5824

idisposable是.net中乙個很重要的介面,一般用來釋放非託管資源,我們知道在使用了idisposable的物件之後一定要呼叫idisposable.dispose()方法,或者使用.net提供的關鍵字using來達到這一目的,如:

public void readfile()

}

使用using關鍵字後,編譯器將在他的末尾自動插入乙個dispose方法的呼叫。我們可以利用這一點嘗試完成下面的需求:

我們希望將警告的文字以紅色顯示在控制台上,然後再恢復初始顏色顯示其他文字內容。按照傳統做法,我們先儲存初始顏色,設定新顏色,向控制台輸出警告資訊,恢復初始顏色,輸出其他文字。

public void show()

如果利用我們前面分析的idisposable模式,我們先實現乙個能夠接收action型別的通用disposable:

public class disposableaction:idisposable

public void dispose()

}

進一步實現之前的需求

public void show()

console.writeline("other message");

}

這似乎也沒比上面高明多少,是因為這個例子不能夠展現這個模式的威力。在《三種觀察者模式的c#實現》一文中,我介紹的第三種方案是利用action來實現,而該文並沒有給出如何取消訂閱的方法。利用本文的內容將會實現乙個優雅的取消訂閱方案:

public idisposable onalarm(actionalarmaction)

如果想只訂閱一次,就使用using:

using (_clock.onalarm(data => ))

反之,如果不想取消訂閱就不要使用using,不要呼叫dispose()方法。

IDisposable的另類用法

idisposable是.net中乙個很重要的介面,一般用來釋放非託管資源,我們知道在使用了idisposable的物件之後一定要呼叫idisposable.dispose 方法,或者使用.net提供的關鍵字using來達到這一目的,如 public void readfile 使用using關鍵字...

C 物件的銷毀和IDisposable

1.物件的析構函式與finalize方法 與c 類似,c 允許程式設計師為類定義乙個 析構函式 class myclass 上面的 編譯後,可以看到 這裡呼叫了object類的finalize方法,這個方法裡面是空的,什麼也沒有。與建構函式類似,子類的析構函式會自動呼叫基類的析構函式,由此不斷上溯,...

C 物件的銷毀和IDisposable

1.物件的析構函式與finalize方法 與c 類似,c 允許程式設計師為類定義乙個 析構函式 class myclass 上面的 編譯後,可以看到 這裡呼叫了object類的finalize方法,這個方法裡面是空的,什麼也沒有。與建構函式類似,子類的析構函式會自動呼叫基類的析構函式,由此不斷上溯,...