rzutowanie object na interface - czy jest dobrym rozwiązaniem

0

Witam. mam kontrolki, które dziedziczą te same interfejsy. Stworzyłem klasę aby móc zarządzać modułami z poziomu kontrolera modułów

public class ModuleInterfaceControl
    {
        public ModuleInterfaceControl(object ModuleObject)
        {
            Initialize = ModuleObject as IModuleInitialize;
            Management = ModuleObject as IModuleManagement;
            Values = ModuleObject as IModuleValues;
        }

        IModuleInitialize Initialize;
        IModuleManagement Management;
        IModuleValues Values;
    }

I teraz moje pytanie. Czy jeżeli jestem pewien, że w argumencie konstruktora znajdzie się kontrolka dziedzicząca każdy z tych interfejsów to poprawnym jest rzutowanie z object na interface?

Klasę uzyskiwałbym na podstawie interfejsu:

public interface IModuleInitialize : IShareUserData
    {
        ModuleInterfaceControl GetInterface();
    }

W ten sposób:

public ModuleInterfaceControl GetInterface()
    {
        return new ModuleInterfaceControl(this);
    }
2
public class ModuleInterfaceControl
    {
        public ModuleInterfaceControl(object ModuleObject)
        {
            Initialize = ModuleObject as IModuleInitialize;
            Management = ModuleObject as IModuleManagement;
            Values = ModuleObject as IModuleValues;
        }

        IModuleInitialize Initialize;
        IModuleManagement Management;
        IModuleValues Values;
    }

Nie bardzo widzę sensu w tej klasie - skoro, jak mówisz, obiekt zawsze będzie implementował wszystkie te interfejsy, to po co w ogóle robić trzy interfejsy - połącz je w jeden, a cały ten ModuleInterfaceControl traci rację bytu.

Nie podoba mi się też to użycie object - założenie "kontrolka dziedzicząca każdy z tych interfejsów" powinno być wymuszone już na etapie kompilacji i widoczne dla czytającego kod.

Użyj jednego interfejsu (załóżmy IModule) który łączy twoje trzy, ewentualnie dziedziczy po tych trzech.

Albo nie używaj interfejsów tylko bazowej klasy modułu.

0

@Azarien chodzi mi o to, że te interfejsy będą miały sporo metod i chcę je jakoś podzielić. Stąd ta klasa.

2

Jeśli już koniecznie chcesz mieć trzy interfejsy, choć nie wiem czy to dobry pomysł, to przynajmniej pozbądź się tego object, na przykład tak:

interface IModule : IModuleInitialize, IModuleManagement, IModuleValues {}

1 użytkowników online, w tym zalogowanych: 0, gości: 1