| 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>(); | 
|     } | 
| } |