真繞啊。
話說,我有個窗體程式,執行著乙個執行緒,執行緒裡各種操作。操作過程中,各種提示、
相關資訊需要記錄到日誌,同時也要輸出到窗體上,好讓人一目了然。
這部分的資訊處理工作,我放在乙個專門的類裡完成。姑且叫做日誌類吧。這個日誌類的正職,是將資訊記錄到日誌檔案。現在,還要輸出到窗體,怎麼辦呢?如果直接在這個類裡操作窗體物件,就破壞了這個類的封閉,又增加了耦合。如果是物件注入吧,可能也是個辦法,但我總覺得不是很好。今天輸出到窗體,你新增乙個物件;明天要記錄到資料庫呢,是不是又要增加個啥?
用委託啊。
日誌類裡宣告乙個委託,窗體註冊這個委託。委託委託,誰委託誰?各方委託給執行類去執行。將自己的私貨委託給執行類去執行。這有點像裝飾模式。執行類本身有自己的功能,然後大家委託它,給它刷了一層又一層的漆。在我這個例子中,日誌類就是執行類,窗體是委託方。
上**:
//執行緒中呼叫日誌類
logger.instance
.info($@"第 輪開始 ……");
//日誌類
public
class logger
-->");
}static logger instance = null;
public
static logger instance
return instance;}}
}
//窗體
public
partial
class form1 : form
}//窗體輸出資訊類
public
class showinfo
public
void
showtext(string mess)
;_rtb.invoke(dlg, mess);
}else
}long _rows = 0;
void showtext(object objmess)
else
_rtb.selectionstart = _rtb.text.length;
_rtb.scrolltocaret();}}
執行結果
日誌檔案:
窗體:
上面這個委託,現在說起來,思路非常清晰,看上去應該是很自然就能想到的,但當時卻想了好一陣子才理清頭緒。現在對委託的理解又深了一些。
C 委託,委託鏈,多播委託
委託 概念 委託是一種使用者自定義的型別.是一種類.可以把委託看成用來執行方法 函式的乙個東西 形式 delegate 函式返回型別 委託名稱 引數部分 例項化 委託型別 例項化名 new 委託型別 方法名稱 實現 usingsystem usingsystem.collections.generi...
C 委託 委託概述
c 委託概述 委託這個詞在生活中經常用到,委託律師打官司,委託房地產公司購買房子。委託保險 人辦理保險。委託就是把事情交給別人去辦。c 中的委託和生活中的委託很相似,如果將乙個方法委託給乙個物件,那麼這個物件就可以全權 這個方法執行。委託宣告定義乙個類,它是從 system.delegate 類派生...
C 委託 匿名委託
c 委託 匿名委託 委託變數在繫結方法時,是把方法名賦值給了委託變數名,這 樣就需要在類裡面定義方法,而有些方法只用到了 次,這樣的 方法在類裡面過多時,程式的可讀性就不是太好,針對這種情 況,可以使用匿名委託,即不用在類裡面額外定義方法.delegate定義的匿名委託 格式 delegate 引數...