У меня был следующий код:
protected void Initialize(){
this.Fonts.Initialize();
this.Screens.Initialize();
this.Menu.Initialize();
}
protected void Update(){
this.Screens.Update();
this.Menu.Update();
}
После написания этого я перефакторизовал код в:
protected void Initialize(){
this.CallMethod<INeedInitialization>(
(i) => { i.Initialize(); }
, this.Fonts, this.Screens, this.Menu
);
}
protected void Update(){
this.CallMethod<INeedUpdating>(
(i) => { i.Update(); }
, this.Screens, this.Menu
);
}
private void CallMethod<T>(Action<T> action, params T[] items){
items.ToList().ForEach(i => action(i));
}
Затем я понял, что в моей базе кода естьмного повторного использования операций типа CallMethod<T>
, поэтому я еще раз пересмотрел:
public static extensions{
// I use object type as I can have INeedInitialization, INeedUpdate etc...
public static void CallMethod<T>(this object obj, Action<T> action,
params T[] items){
items.ToList().ForEach(i => action(i));
}
}
Теперь я могу получить CallMethod<T>
на всех моих объектов, но почему-то после этого я чувствую, что с этим кодом что-то в корне не так, и не могу точно определить, почему я чувствую, что он некорректен.
Кроме того - как я могу наложить ограничения ИЛИ на общийспособ принимать только объекты типа INeedUpdating
или INeedInitialize
вместо расширения базового типа Object
?
Может кто-нибудь помочь?
Спасибо!