【发布时间】:2013-03-29 16:15:00
【问题描述】:
关于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();
不需要。
【问题讨论】:
标签: .net design-patterns idisposable