相关疑难解决方法(0)

在C#中完成/处理模式

C#2008

我一直在研究这个问题,我仍然对一些问题感到困惑.我的问题如下

  1. 我知道如果你处理非托管资源,你只需要一个终结器.但是,如果您使用托管资源来调用非托管资源,您是否仍需要实现终结器?

  2. 但是,如果您开发一个不直接或间接使用任何非托管资源的类,您是否可以实现IDisposable该类,以便您的类的客户端可以使用'using statement'?

    是否可以接受实现IDisposable,以便您的类的客户端可以使用using语句?

    using(myClass objClass = new myClass())
    {
        // Do stuff here
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我在下面开发了这个简单的代码来演示Finalize/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)
        {
            // …
    Run Code Online (Sandbox Code Playgroud)

.net c# idisposable finalizer

369
推荐指数
7
解决办法
17万
查看次数

这个IDisposable实现是否正确?

我永远不会记住实现IDisposable接口的所有规则,因此我尝试提出一个基类来处理所有这些并使IDisposable易于实现.我只是想听听你的意见,如果这个实现是好的,或者你是否看到我可以改进的东西.该基类的用户应该从它派生,然后实现两个抽象方法ReleaseManagedResources()ReleaseUnmanagedResources().所以这是代码:

public abstract class Disposable : IDisposable
{
    private bool _isDisposed;
    private readonly object _disposeLock = new object();

    /// <summary>
    /// called by users of this class to free managed and unmanaged resources
    /// </summary>
    public void Dispose() {
        DisposeManagedAndUnmanagedResources();
    }

    /// <summary>
    /// finalizer is called by garbage collector to free unmanaged resources
    /// </summary>
    ~Disposable() { //finalizer of derived class will automatically call it's base finalizer
        DisposeUnmanagedResources();
    }

    private void DisposeManagedAndUnmanagedResources() {
        lock (_disposeLock) …
Run Code Online (Sandbox Code Playgroud)

.net c# dispose idisposable

1
推荐指数
1
解决办法
2261
查看次数

标签 统计

.net ×2

c# ×2

idisposable ×2

dispose ×1

finalizer ×1