using System.Collections.Generic; 
 | 
  
 | 
public class TBlackBoard { 
 | 
  
 | 
    class TBlackboardItem { 
 | 
  
 | 
        private object m_Value; 
 | 
  
 | 
        public void SetValue(object v) { 
 | 
            m_Value = v; 
 | 
        } 
 | 
  
 | 
        public T GetValue<T>() { 
 | 
            return (T)m_Value; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private Dictionary<string, TBlackboardItem> m_ItemDict; 
 | 
  
 | 
    public TBlackBoard() { 
 | 
        m_ItemDict = new Dictionary<string, TBlackboardItem>(); 
 | 
    } 
 | 
  
 | 
    ~TBlackBoard() { 
 | 
        m_ItemDict.Clear(); 
 | 
        m_ItemDict = null; 
 | 
    } 
 | 
  
 | 
    public void SetValue(string key, object v) { 
 | 
        TBlackboardItem item; 
 | 
        if (m_ItemDict.ContainsKey(key) == false) { 
 | 
            item = new TBlackboardItem(); 
 | 
            m_ItemDict.Add(key, item); 
 | 
        } 
 | 
        else { 
 | 
            item = m_ItemDict[key]; 
 | 
        } 
 | 
        item.SetValue(v); 
 | 
    } 
 | 
  
 | 
    public T GetValue<T>(string key, T defaultValue) { 
 | 
        if (m_ItemDict.ContainsKey(key) == false) { 
 | 
            return defaultValue; 
 | 
        } 
 | 
        return m_ItemDict[key].GetValue<T>(); 
 | 
    } 
 | 
} 
 |