人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

C# Idioms: Safely辦法

C# Idioms: Safely辦法

更新時間:2022-07-08 文章作者:未知 信息來源:網絡 閱讀次數:

C# Idioms: Safely方法

marshine

(原文排版格式 http://www.marshine.com)



名稱

Safely Method

意圖

通過方法保證返回有效(不為空引用,null或Nothing)的對象或拋出異常,當存在多個調用者時簡化調用者需要處理null返回值的代碼。

動機

一個存放對象的集合或類似功能的容器類,提供了根據鍵值返回集合成員的接口,如果不存在指定鍵值的項,則返回一個空引用。例如根據Student的SID(學號)從StudentManager返回Student對象,如果存在指定的學號,則返回一個有效的Student對象,否則返回null。大多數情況下調用者需要根據是否null值決定如何處理,如果在程序的多處都需要假定返回的一定是非null的有效對象,否則程序必須執行特殊的路徑,如拋出異常,如下:

Student student = studentColleciont.GetStudentByID("13432");
if (student == null) {
// null處理代碼,如拋出異常
}

顯然在每一個調用處書寫這些代碼會造成代碼的重復,即便是將處理過程放在一個單獨的null值處理方法中,調用方仍然需要調用null值處理方法,并且null值處理方法顯得很孤立,影響程序的結構。

產生這個問題的關鍵是因為調用者依賴于方法的返回值,并強化了方法定義的后置條件(不允許為null值),但是并不能修改原來方法定義的后置條件,因為其它地方需要保持原來的 定義。解決辦法是提供擴展了原方法契約(Contact,根據Design by Contact的思想,方法定義就是一個調用者和實現者之間的契約)的新方法,因為擴展方法要保證返回適用的值(使用“適用”,是因為null并非無效,只是不適應當前調用處),所以將它稱之為Safely方法。Safely方法保證返回 適用的值,并提供統一的異常處理方式,調用者不需要再處理返回null對象的情況。

適用性

多個調用者需要依賴方法返回適用的值。
無法修改原來的接口,原來的方法契約被更多的地方使用。
調用者不直接處理不適用值(如通過異常傳遞給上層調用者)。
結構

在原來的集合或容器上增加Safely方法,方法名由原來的方法名加Safely后綴:

XXXSafely(...);
GetXXXSaftly(...);

效果

簡化了調用者對不適用返回值的處理,消除了調用者冗余的不適用值處理代碼,并且能夠更好的維護不適用值的處理代碼。

實現

因為Safely方法只是在原來返回值方法上的契約擴展,因此Safely方法將請求傳遞給原來的方法,然后增加不適用值的處理。

代碼示例

我們在StudentManager上增加一個GetStudentByIDSafely方法,當指定的Student不存在時,返回一個自定義的異常NotExistedStudentException,更上層的代碼可以通過捕獲異常來處理:

public Student GetStudentByIDSafely(string sid)
{
Student student = GetStudentByID(sid);
if (student == null)
{
// 拋出一個特定的異常
throw new NotExistedStudentException(sid);
}
return student;
}

語言相關性

語言無關。

相關模式

Nullable Object模式也被用于處理null值。同Nullable Object模式的差異在于,Safely方法保證返回不為null的對象, 而Nullable模式的目的是使null值和其它值一樣使用統一的處理方式,如調用ToString。Nullable將在Microsoft .Net Framework 2.0中得到直接支持(System.Nullable<T>類)。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 繁昌县| 金昌市| 铁力市| 柏乡县| 麟游县| 邯郸市| 兴化市| 外汇| 沙湾县| 八宿县| 陆川县| 南陵县| 嵩明县| 兰西县| 南部县| 长春市| 玉山县| 洛南县| 黑河市| 滨海县| 都昌县| 府谷县| 安塞县| 霍城县| 碌曲县| 外汇| 民丰县| 开远市| 库车县| 鄯善县| 新竹市| 吴堡县| 崇左市| 枞阳县| 宿松县| 丰原市| 从化市| 晋中市| 江安县| 交口县| 合山市|