我有小帮手类。这些类在内部用于确保某些类型的字符串始终具有适当的格式(邮件地址,电话号码,ID,URL,键,颜色...)。IDisposable - 在没有外部引用的情况下在类中处理什么?
我希望把它们变成使用块,要能够回收的变量名:
using(Id id = ids.First())
{
Container container = containers.getById(id);
...
}
foreach(Id id in ids.Skip(1))
{
Container container = containers.getById(id);
...
}
当我这样做时,Visual Studio问我这些类标记为Disposable
,我做到了,但我我不知道如何处理方法存根。让我们来“邮件地址”类为例:
public class MailAddress : IEquatable<MailAddress>, IDisposable
{
const string MAILADDRESSPATTERN = ...
protected string _address;
public MailAddress(string address)
{
if (address == null) throw new ArgumentNullException("address");
if (!Regex.IsMatch(address, MAILADDRESSPATTERN)) throw new ArgumentException("address");
this._address = address.ToLower();
}
bool IEquatable<MailAddress>.Equals(MailAddress other)
...
public override int GetHashCode()
...
...
...
public override string ToString()
...
public void Dispose()
{
throw new NotImplementedException();
}
}
究竟会在Dispose
功能有这样一类呢?我必须处理哪些垃圾收集器会自动执行哪些操作?
到目前为止,我没有在任何地方给那个班级打电话Dispose
,而且它似乎工作正常。现在,该班级是Disposable
,我是否必须在整个代码中添加对Dispose
的呼叫?
如果你的类没有使用非托管资源,那么'IDisposable'没有用处。 –
垃圾收集器仅处理受管资源。你只需要实现IDisposable你的类正在使用非托管资源,如COM对象。 using语句处理为您处置的呼叫。 –