我有用於緩存一個抽象類,實現如下(簡化的)在從列表繼承類更新此<T>
public abstract class DataCacheMember<T> : List<T>
{
private List<T> _data;
public List<T> Data
{
get
{
if (_data == null || _data.Count() < 1)
_data = GetData();
return _data;
}
}
private string ApiEndPoint {get; set;}
private Timer timer;
private List<T> GetData()
{
//call api and get data
}
private void RefreshData()
{
_data = GetData();
}
protected DataCacheMember(string apiEndPoint)
{
ApiEndPoint = apiEndPoint;
timer = new System.Threading.Timer(
e => RefreshData(),
null,
TimeSpan.Zero,
TimeSpan.FromMinutes(10));
}
}
它允許快速創建緩存對象的用一個簡單的字符串的API端點:
public class StateMap<Properties> : DataCacheMember<Properties>
{
public StateMap(string apiEndPoint = "Property/GetProperties")
: base(apiEndPoint)
{}
}
的全部原因從List<T>
繼承了以刪除領域的需要。
但是,如果我嘗試修改構造函數和刷新:
private void RefreshData()
{
this = GetData() as DataCacheMember<T>;
}
protected DataCacheMember(string apiEndPoint)
{
this = GetData() as DataCacheMember<T>;
}
我得到的Cannot assign to <this> because it is Read Only
錯誤。
解決此問題的正確方法是什麼?我只需要使用Clear()
和AddRange()
來管理對象?
如果我這樣做,我看到第一次調用該對象將返回空,因爲該對象可以在構造函數完成它的調用之前返回。
列表的責任是填充自己嗎? – CodeCaster
你不應該繼承'List'。 –
SLaks
「從列表繼承的全部原因是爲了消除字段的需要。」但你有一個存儲列表的字段 - 如果你的結構不是一個列表,而是_contains_列表,然後以這種方式進行建模 - 繼承似乎並不是這裏的正確設計。 –