c# - Classes with disposable fields should be disposable -


the fxcop warning "classes disposable fields should disposable" confuses me. see contrived example below

only 1 type creates , owns disposable resource, number of types can use (or "borrow") resource. have seen developes take fxcop warning on util1 , util2 indicate since have field of disposable type, must implement dispose , dispose field. that's not want here.

is problem that

  1. making classes borrow disposable resources antipattern. disposable resource passed method argument util1 , util2, , problem go away. classes create disposable resource should ever have them fields, field indicates ownership.

  2. the warning isn't clever enough. should warning when types own disposable resources aren't disposable, , in scenario 1 class owns it, while others borrow it. fact injected constructor parameter have been used more clever rule detect warning should not raised borrowing class.

  3. something else?

static class program {    public static void main()     {       using(var r = new someresource())        {           console.writeline(new util1(r).foo());              console.writeline(new util2(r).foo());          }                                     } }  public sealed class someresource : idisposable  {    private readonly nativeresource native;    public void someresource()     {       native = native.createdisposablething();    }    public void dispose()    {       native.dispose();    } }  public sealed class util1 {    private readonly someresource res;    public util1(someresource res) {  this.res = res; }    public string foo() { /* uses res */ } }  public sealed class util2 {    private readonly someresource res;    public util2(someresource res) {  this.res = res; }    public string foo() { /* uses res */ } } 

in of case if have disposable field, means want use later , wrap it. if return field external code, can disposed , break own class unless able check if resource disposed before each usage.

if want make fabric, don't need keep disposble resource field. that's why rules true in special rare case able make "won't fix".

other patterns pretty rare because hard maintain without introducing bug.


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -