/ / Zapobieganie rzutowaniu typu obiektu singletonowego - c #, dziedziczenie, rzutowanie, singleton

Zapobieganie rzutowaniu pojedynczego obiektu - c #, dziedziczenie, rzutowanie, singleton

Rozszerzyłem klasę singleton, która otrzymuje odwołanie do obiektu singleton za pomocą następującego wywołania

SingletonClass.singleton

Teraz chcę tego za każdym razem, gdy dzwonię singleton zmienna na moim CustomSingletonClass że dostaję odniesienie do CustomSingletonClass i nie SingletonClass.

W tej chwili używam do tego celu rzutów ((CustomSingletonClass)CustomSingletonClass.singleton)

Czy muszę jakoś przesłonić właściwość singleton?

Odpowiedzi:

0 dla odpowiedzi № 1

Zwykle singleton używa właściwości statycznych, aby uzyskać instancję obiektu (wygląda na to, że twój jest SingletonClass.singleton).

Ponieważ jest to wywołanie statyczne, nie można zastąpić tej porowatości w odziedziczonym obiekcie, ponieważ wywołanie będzie zawsze wykonywane na bieżącym typie, a nie na instancji (nadpisanie statycznego jest po prostu nonsensem).

Możesz spróbować zmienić sposób działania, dodając setter do singletona i ustawiając żądaną instancję przed każdym połączeniem.

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();