2020年9月3日 星期四

Reflection (反射) 小技巧

 

Reflection 很常使用,雖不是專案標配,但一年之內總會有使用它的地方,實務上往往與多型搭配起來完成動態實例化物件的技法;

但現實中既有程式難以捉摸,不一致的撰寫風格,或意指相同事務,但文字與設計方式卻充滿弔詭。這次遇上了,

還好C# 內建函式可以幫忙解決。



先來設計物流商,這邊預計有黑貓與新竹貨運,實際會繼承介面,先以簡單能識別出即可



列舉紀載對應的物流類型


Client 端實際呼叫黑貓



其中,在GetShipper 函式中,列舉的名稱需要物流商的類型名稱,若今天列舉的 BlackCat 調整為第一個字元小寫 blackCat,

這時候就會找不到對應的物流商,如下所示。



這時候,可參考CreateInstance 方法有支援多載,ignoreCase 傳入參數以要區分大小寫


調整後,就可以正常建立對應物件




當然,列舉名稱可以透過「重構」技巧,將參考的一併修改,

不太可能風格不一致的發生;確實,但遇到的卻是使用字串設計與判斷...


沒有留言:

張貼留言