Forum: PC-Programmierung C# Singleton-Class Callback


von Albert (Gast)


Lesenswert?

Hi,

hier im Forum schon oftmals besprochen, coole Methode aber noch nicht zu 
100% von mir verstanden ^^

gibt es eine Möglichkeit aus einer Singleton-Instance einen Callback zu 
tätigen?
1
public class Singleton
2
{
3
   private static Singleton instance;
4
5
   private Singleton() {}
6
7
   public static Singleton Instance
8
   {
9
      get 
10
      {
11
         if (instance == null)
12
         {
13
            instance = new Singleton();
14
         }
15
         return instance;
16
      }
17
      
18
      if anything happend
19
      => call MethodeFromSingleton()
20
   }
21
}

1
public partial class MainWindow : Window
2
{
3
   Singleton st = Singleton.instance;
4
   public MethodeFromSingleton() {
5
      doAnything...
6
   }
7
}

evtl kann ich einen Trigger im Main irgendwie bekannt machen <- z.B. als 
Callback.
1
public MainWindow(){
2
   st.Callback = MethodeFromSingleton();
3
}

?

kann mir jemand helfen?

von bluppdidupp (Gast)


Lesenswert?

Einfach einen Event in der "Singleton"-Klasse ergänzen als static und 
den Event feuern bei "if anything happend"?

von c-hater (Gast)


Lesenswert?

Albert schrieb:

> gibt es eine Möglichkeit aus einer Singleton-Instance einen Callback zu
> tätigen?

Natürlich, genauso wie aus jedem anderen Objekt.

> public class Singleton
[...]

So muss man unter .net kein Singleton bauen (kann es aber natürlich).

Unter .net kann man einfach eine Klasse selber als singleton benutzen. 
Man erspart sich den ganzen Aufwand der klassischen Singletons, um die 
Zahl der Instanzen auf eins zu begrenzen, weil man einfach überhaupt 
keine Instanzen erzeugt, sondern alles Nötige direkt in die Klasse 
einbaut.

In C# ist das Zauberwort für Felder, Methoden und Events der Klasse dann 
"static", in VB.net "shared".

Der einzige Trick ist dann noch: Man deklariert einen privaten 
Konstruktor und die Klasse als nicht vererbbar und verhindert damit 
schon im Ansatz jede Idee eines noch so inkompetenten Benutzers, die 
Klasse doch irgendwie instanziieren zu wollen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.