Is it possible to force the use of “using” for disposable classes?

前端 未结 10 640
轮回少年
轮回少年 2020-12-05 06:49

I need to force the use of \"using\" to dispose a new instance of a class.

public class MyClass : IDisposable
{
   ...
}

using(MyClass obj = new MyClass())          


        
10条回答
  •  无人及你
    2020-12-05 07:17

    If you want to force the disposal of resources withing a scope it's possible, but IDisposable is not really needed. With the following code:

    public class ResourceHandle
    {
        public delegate void ResourceProvider(Resource resource);
    
        private string _parms;
    
        public ResourceHandle(string parms)
        {
            _parms = parms;
        }
    
        public void UseResource(ResourceProvider useResource)
        {
            Resource resource = new Resource(_parms);
            useResource(resource);
            resource.Close();
        }
    }
    
    
    public class Resource
    {
        private string _parms;
    
        internal Resource(string parms)
        {
            // Initialize resource
        }
    
        internal void Close()
        {
            // Do cleaning
        }
    
        // Public methods of resource
    }
    

    You can use the Resource ONLY in this way:

    public void foo()
    {
        ResourceHandle resourceHandle = new ResourceHandle("parms");
    
        resourceHandle.UseResource(delegate(Resource resource)
            {
                // use resource
            });
    }
    

    As you can see IDisposable is not really needed here.

提交回复
热议问题