Activator 跟 interface 搭配的好幫手

Activator動態建立哪個class類別

 interface 在規範好實作規格後,可以有不同的繼承class去實作,程式運作的過程中有可能需要動態決定用哪個實作類別來建立跟interface的對應,跟之前 Reflection 動態決定使用哪個名稱來存取哪個field類似的議題,差別是Activator則把層次提升到要用來建立哪個class.

這也是我寫模擬器處理任天堂rom mapper遇到的一個經驗,每個遊戲mapper編號可能不同,直覺做法就是switch mapper的編號,然後在case中指派mapper的interface要用哪個class來生成實例物件,但因為我的mapper class實作都有固定的名成規則,總覺得可以簡化這種switch的做法,於是查一查下,就找到了更方便的替代方式....也是一行ko,舒服.

IMapper MapperObj = (IMapper)Activator.CreateInstance(Type.GetType("AprNes.Mapper" + mapper.ToString("d3")));

官方說明 https://msdn.microsoft.com/en-us/library/system.activator(v=vs.110).aspx