Regarding IDisposable
I am creating an interface that I would expect to use system resources most of the time, but not always. Would it be reasonable to expect usage to include IDisposable in my interface?
For example, I have an interface that provides an average value for synchronizing with.
interface IDateTimeProvider : IDisposable { int LeapSeconds {get;set;} DateTime LocalNow {get;} DateTime UtcNow {get;} DateTime GpsNow {get;} } class NtpTimeProvider : IDateTimeProvider { // Assume client is setup and ready to use. // Obtains time via network resources NtpClient client; NtpTimeProvider (int leapSeconds) { LeapSeconds = leapSeconds;} int LeapSeconds {get;set;} DateTime LocalNow {get{return client.Utc};} DateTime UtcNow {get{return client.Utc};} DateTime GpsNow {get{return client.Utc - TimeSpan.FronSeconds(LeapSeconds);}} void Dispose() { if(client != null) Client.Dispose(); } } class SystemTimeProvider : IDateTimeProvider { SystemTimeProvider (int leapSeconds) { LeapSeconds = leapSeconds;} int LeapSeconds {get;set;} DateTime LocalNow {get{return DateTime.Now};} DateTime UtcNow {get{return DateTime.UtcNow };} DateTime GpsNow {get{return DateTime.UtcNow - TimeSpan.FronSeconds(LeapSeconds);}} void Dispose() { //obviously this isn't needed} }
So the question is, should I impose the IDisposable requirement when I expect most implementations to use the system resources that should be released? I am currently doing just that, since it is easier when the IDateTimeProvider user frees up resources and
if(myDateTimeProvider is IDisposable) ((IDisposable)myDateTimeProvider).Dispose();
will not need.
galford13x Mar 29 '13 at 16:15 2013-03-29 16:15
source share