[System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] public partial class ContentHubDataCacheSoapClient : System.ServiceModel.ClientBaseWhen I create an instance of ContentHubDataCacheSoapClient should I dispose it?, ContentHubDataCacheSoap { }
What Developers typically did is used Object Browser to see if there is a method called Dispose, see a picture below for an example matching a code above :) It's easy to see that there is no Dispose method listed there, but I circled in the red where one can see if a class implements IDisposable interface.
Other developers to answer a question suggested that IDisposable can be satisfy by implementing a Close method (this is not true, see code example below).
But why Dispose method was not listed in a list of methods. The answer is as simple as to understand that one can implement a method explicitly naming an interface that requires it, and thanks to that it will not be listed in Object Browser. An example is below.
public class DisposingClass : IDisposable { public void Dispose() { } } public class ClosingClass{ public void Close() { } } public class ImplementingDisposableInterfaceClass : IDisposable { void IDisposable.Dispose() { Close(); } public void Close() { } } public class ChildClass : ImplementingDisposableInterfaceClass { } public class UsingClass { public void UsingMethod() { // Compilation time exception, IDisposable needs to implement IDisposable. using (var c = new ClosingClass()) { } // Typical way of implementing Disposable. using (var d = new DisposingClass()) { } using (var d = new ImplementingDisposableInterfaceClass()) { } // Dispose method will not be showed in Object Browser using (var d = new ChildClass()) { } } }
No comments:
Post a Comment