假設我想實現一個到期的緩存,並且我想在底層存儲容器上進行通用化。所以我會讓用戶告訴我的班級使用哪種容器類型。但是因爲我會填充一個私有類型,所以我需要他們告訴我一個通用類型。所以,我試圖做這樣的事情:如何聲明泛型的泛型類型參數?
class MyCache<K, V, Container> : IDictionary<K, V>
where Container : // what goes here?
{
private class MyValue
{
public readonly V Value;
public readonly DateTime InsertionTime;
}
private IDictionary<K, MyValue> m_dict = new Container<K, MyValue>(); // a specialization of the generic container
// implement IDictionary<K, V>, checking for value expiration
public bool TryGetValue(K key, out V val)
{
MyValue myval;
if (m_dict.TryGetValue(key, out myval))
{
if (Expired(myval.InsertionTime))
{
m_dict.Remove(key);
}
else
{
val = myval.Value;
return true;
}
}
// not there or expired
val = default(V);
return false;
}
}
所以容器需要是一個泛型類型,因爲我想專注它在一個私有類型。我想像這樣使用它:
var cache = new MyCache<String, String, Dictionary>();
這將導致實施使用詞典。
這可能嗎?它的語法是什麼?如果不可能,在容器上獲得類型安全性和這種可組合性的等級是什麼最佳選擇?
@MBabcock:無論如何,這篇文章已經消失了 - 我誤解了這個問題。基本上OP所要求的在C#中是不可行的。 – 2012-03-12 17:27:15
同意。它看起來有點奇怪。這不正確嗎? – 2012-03-12 17:27:55
@ M.Babcock:可能 - 它現在消失了,我不記得了。我所得到的甚至在某種程度上是陌生的,儘管它應該可行...... – 2012-03-12 17:31:36