欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

ESBasic 可復用的.NET類庫(12) -- 對象管理

系統 1611 0

1. 緣起:

我們經常需要對一些動態對象進行管理,最常見的例子就是在線用戶管理。當一個用戶成功登陸到服務器后,我們就需要將其管理起來;當他退出后,就不再需要再管理他了。這就是所謂動態對象的含義,這些對象并不是一直需要被管理,只有當其被激活后,才需要被管理。它們總是在“激活”狀態和“非激活”狀態之間不斷地切換。

我設計了對象管理器 ESBasic.ObjectManagement.Managers.IObjectManager 來管理類似的動態對象。這個類是 ESBasic 提供的眾多對象管理容器中的非常簡單的一個,無論是功能還是實現。

對象管理器的形象示意圖如下:

ESBasic 可復用的.NET類庫(12) -- 對象管理器 IObjectManager

2. 適用場合:

如果你的系統有類似以下的需求,就可以使用 IObjectManager

(1) 將要被管理的每個動態對象都有唯一的 ID

(2) 對象經常要被添加到管理器中和經常要從管理器中移除。

(3) 管理器在多線程的環境下被使用。

3 .設計思想與實現

IObjectManager 的接口定義如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public interface IObjectManager < TPKey,TObject >
{
event CbGeneric < TObject > ObjectRegistered;
event CbGeneric < TObject > ObjectUnregistered;

int Count{ get ;}

/// <summary>
/// Add如果已經存在同ID的對象,則用新對象替換舊對象。
/// </summary>
void Add(TPKeykey,TObjectobj);

void Remove(TPKeyid);
void Clear();
bool Contains(TPKeyid);

/// <summary>
/// Get如果不存在,則返回default(TObject)。
/// </summary>
TObjectGet(TPKeyid);

IList
< TObject > GetAll();
IList
< TPKey > GetKeyList();
IList
< TPKey > GetKeyListByObj(TObjectobj);
}

這個接口相當簡單,就像是一個 IDictionary 的加強版。是的,你確實可以這樣理解,把 IObjectManager 當作一個更好用的字典。而且 ObjectManager 的實現也的確是使用 IDictionary 來的。

但是它與 IDictionary 的區別――也是它更好用的地方在于:

(1) 它是多線程安全的,可以再多線程的環境下被使用。與 IDictionary 相比,這應該是最大的一個易用點。

(2) Add 方法采用的是覆蓋原則――如果同 Key 的對象已經存在,則用新對象覆蓋舊的對象。當然,如果你不想直接覆蓋,再調用 Add 方法之前可以先調用 Contains 方法檢測一下。

(3) 當調用 Remove 方法從管理器中移除一個不存在的對象時,并不會拋出異常,而是直接返回。

(4) GetKeyList 方法返回的是鍵值的拷貝,這樣在對返回列表做 foreach 遍歷時,即使內部字典中的元素發生了增加 / 刪除也不會影響遍歷操作。

(5) 當內部集合的元素發生增加 / 刪除時,以事件( ObjectRegistered 事件和 ObjectUnregistered 事件)的方式通知外部。

4. 使用時的注意事項

IObjectManager 的兩個泛型參數都是沒有泛型約束的,也就是說 TObject 可以是值類型。當 TObject 是值類型時,如果使用一個不存在的 ID 去調用 Get 方法,則不會返回 null ,因為值類型不可能為 null ,這時將返回 default(TObject) 。而這樣的結果也許并不是你所期望的。

所以,如果你的 TObject 為值類型,又不想出現上面的情況,那么在調用 Get 方法之前有必要先調用 Contains 方法確認一下對象是否真的存在――這就像在使用 IDictionary 一樣。

5. 擴展

對象管理器 IObjectManager 暫時沒有任何擴展。

注:ESBasic源碼可到 http://esbasic.codeplex.com/ 下載。
ESBasic討論:37677395
ESBasic開源前言

ESBasic 可復用的.NET類庫(12) -- 對象管理器 IObjectManager


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产资源在线看 | 看全色黄大色黄大片爽一次 | 五月婷六月丁香狠狠躁狠狠爱 | 蜜桃视频在线观看免费视频网站www | 色噜噜色噜噜天天拍一拍 | 亚洲综合一二三区 | 欧洲中文字幕 | 欧美一级片在线视频 | 国产亚洲精品久久无码小说 | 九月婷婷开心九月 | 99亚洲精品色情无码久久 | 奇米影视图片 | 伊人9999| 全部三片在线观看直播 | 国产二区三区视频 | 亚洲成人免费网址 | 中文字幕在线观看av | 一级片一级片一级片一级片 | 2021精品国产综合久久 | 久久综合热 | www.久草.com | 日夜啪啪| 国产精品久久久久久久久免费 | 欧美一级一级 | 久久久中文字幕日本 | 欧美日韩久久 | 精品视频在线免费播放 | 日日夜夜操操操 | 夜干夜夜 | 婷婷色爱区综合五月激情韩国 | 亚洲午夜久久久久中文字幕久 | 亚洲AV久久久久久久无码 | 国产在线观看第一页 | 涩涩伊人| 国产人成精品 | 久久亚洲欧美日韩精品专区 | 欧美一级免费 | 成人爽A毛片免费啪啪 | 国产乱人乱精一区二区视频密 | 久久人人爽人人爽 | 精品国产一区二区三区久久久 |