2013-10-02 19 views
6

Wyobraź sobie, że masz kilka metod, których potrzebujesz, aby uzyskać dostęp do całej aplikacji. Klasa statyczna jest do tego idealna.Używać klasy statycznej według interfejsu?

public static class MyStaticClass 
{ 
    public static void MyMethod() 
    { 
     // Do Something here... 
    } 
} 

Ale może w przyszłości dodam drugą implementację metod statycznych w innej klasie statycznej.

public static class MyStaticClass2 
{ 
    public static void MyMethod() 
    { 
     // Do Something here... 
    } 
} 

Czy istnieje sposób, aby zmienić klasę statyczną używany w moim innym kodem bez zmiany połączeń z MyStaticClass.MeMethod(); do MyStaticClass2.MyMethod();?

myślałem o interfejs, ale nie mam pojęcia jak zaimplementować to ... Jeśli mówię szalony powiedzieć, a ja po prostu zmienić połączenia: D

+0

Nie, nie ma żadnych interfejsów na poziomie statycznym. Możesz skomentować ciało 'MyStaticClass.MeMethod' i przekierować wywołania do' MyStaticClass2', jeśli spieszysz się;) – BartoszKP

+0

Możesz umieścić MyMethod() w innej klasie statycznej, w ten sposób możesz uzyskać do niej dostęp zarówno z swoich aktualnych klas statycznych. – frenchie

Odpowiedz

11

Chcesz factory pattern

więc Twój zakład jest

public static MyStaticClassFactory 
{ 
    public static IMyNonStaticClassBase GetNonStaticClass() 
    { 
     return new MyNonStaticClass1();  
    } 

} 

Instance

public class MyNonStaticClass1 : IMyNonStaticClassBase 
{ 
    // 
} 

Inte rface

public interface IMyNonStaticClassBase 
{ 
    void MyMethod(); 
} 
+0

Można również użyć kontenera DI (w zależności od złożoności aplikacji). –

+0

Nie wiem zbyt wiele na temat DI, ale myślę, że byłoby to dla mnie zbyt skomplikowane: D –

1

Używamy (Zamek Windsor) https://www.nuget.org/packages/Castle.Windsor jak fabryki pojemniku.

To ta sama zasada.

Możesz mieć wiele implementacji dla pojedynczego interfejsu, ale tylko jeden jest kiedykolwiek powiązany z interfejsem w fabryce w czasie wykonywania.

Wszystko, co musisz zrobić, to zamienić klasę implementacji na poziomie Factory, gdy zajdzie taka potrzeba.

To naprawdę przydatne narzędzie, jeśli chcesz zoptymalizować kod, czyli klasę implementacji, ponieważ masz pewność, że jeśli znajdziesz jakieś błędy w nowej klasie implementacji, możesz łatwo zamienić implementację na wcześniej istniejący.