に関してでIDisposable
ほとんどの場合、システム リソースを使用すると予想されるインターフェイスを作成していますが、常にではありません。IDisposable
使用法が私のインターフェイスに含まれていると予想するのは賢明でしょうか?
たとえば、同期する手段を提供するインターフェイスがあります。
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}
}
問題は、IDisposable
ほとんどの実装が解放する必要のあるシステム リソースを使用すると予想される場合に、要件を課す必要があるかどうかです。IDateTimeProvider のユーザーがリソースを解放し、
if(myDateTimeProvider is IDisposable) ((IDisposable)myDateTimeProvider).Dispose();
必要ないでしょう。