2017-01-18 5 views
-1

I erweitert, um eine Singleton-Klasse, die mit dem folgenden AufrufPrevent typecasting von Singleton-Objekt

SingletonClass.singleton 

Jetzt mag ich, dass jedes Mal, wenn ich rufe Sie die singleton Variable auf meinem CustomSingletonClass, dass ich ein den Verweis auf das Singleton-Objekt bekommt Referenz auf eine CustomSingletonClass und nicht SingletonClass.

Im Moment verwende ich eine Typumwandlung zu erreichen, dass ((CustomSingletonClass)CustomSingletonClass.singleton)

Muss ich irgendwie die Singleton-Eigenschaft außer Kraft zu setzen?

+0

Ist Singleton ein Feld oder eine Eigenschaft? – EJoshuaS

+0

Es würde wirklich helfen, wenn Sie Ihren gesamten Code gepostet haben – MichaelDotKnox

Antwort

0

Normalerweise Singleton verwenden statische Eigenschaften, um die Instanz des Objekts (scheint wie Ihres ist SingletonClass.singleton).

Da es sich um einen statischen Aufruf handelt, können Sie diese Eigenschaft in einem geerbten Objekt nicht überschreiben, da der Aufruf immer für den aktuellen Typ und nicht für die Instanz erfolgt (das Überschreiben von Statik ist nur Unsinn).

Sie könnten versuchen, die Funktionsweise zu ändern, indem Sie Ihrem Singleton einen Setter hinzufügen und vor jedem Anruf die gewünschte Instanz einstellen.

public class A 
{ 
    private static A _instance; 

    public static A Instance 
    { 
     get 
     { 
      if (_instance == null) 
      { 
       _instance = new A(); 
      } 
      return _instance; 
     } 
     set { _instance = value; } 
    } 
} 

public class B : A 
{ 

} 

A.Instance = new B();