我有小幫手類。這些類在內部用於確保某些類型的字符串始終具有適當的格式(郵件地址,電話號碼,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語句處理爲您處置的呼叫。 –