Avatar billede everclear Praktikant
30. juli 2007 - 19:24 Der er 8 kommentarer og
1 løsning

Singleton med List<>

Jeg sidder og roder med et lille problem. Jeg skal have lavet en mindre applikation, der består af et besked objekt (Msg) og en liste med beskeder (MsgQueue). Listen skal kunne tilgåes af alle brugere; men der skal kun være én instance (singleton) så det faktisk fungerer på samme måde som en chat kan man vel sige.

Jeg løber dog ind i et problem når jeg skal have lavet singleton-delen i min MsgQueue class. Nogen der kan hjælpe mig lidt?

Mit Msg objekt består af 3 Properties:

- string user
- string message
- DateTime time

og min MsgQueue er så naturligvis en List<Msg>. Men hvordan får jeg lige lavet denne så der kun kan oprettes én intance?
Avatar billede arne_v Ekspert
30. juli 2007 - 19:31 #1
Du laver en singleton klasse MsgQueue som har et private List<Msg> field og nogle
passende metoder til at add og remove fra listen.
Avatar billede arne_v Ekspert
30. juli 2007 - 19:35 #2
NB: Hvis MsgQueue er en queue saa skulel List<Msg> maaske vaere Queue<Msg>
Avatar billede arne_v Ekspert
30. juli 2007 - 19:36 #3
Du kunne ogsaa expose det field direkte som en Property, men det er maaske knapt saa
paent.
Avatar billede everclear Praktikant
30. juli 2007 - 19:36 #4
Min erfaring med Singleton er meget lille lige pt:-) Det er når jeg skal have lavet min class jeg løber ind i problemet.

Jeg når nogenlunde til:

private static List<Msg> _queue;

private MsgQueue()
{
}

public static MsgQueue GetQueue()
{
    if (_queue == null)
    {
        _queue = new List<Msg>();
    }
}

Men det giver jo ikke så meget mening i og med jeg ikke får nogen List<> tilbage:-)
Er jeg helt på vildspor eller er der en løsning på skidtet?:-)
Avatar billede everclear Praktikant
30. juli 2007 - 19:37 #5
Queue er godt nok en List<>. Navnet er måske ikke så godt valgt kan jeg godt se:-)
Avatar billede arne_v Ekspert
30. juli 2007 - 19:53 #6
public class MsgQueue
{
    private List<Msg> q;
    private static MsgQueue instance = null;
    private MsgQueue() {
        q = new List<Msg>();
    }
    private static object mylock = new object();
    public static MsgQueue Instance
    {
        get {
            lock(mylock)
            {
                if(instance == null)
                {
                    instance = new MsgQueue();
                }
            }
            return instance;
        }
    }
    // metoder til at lave det egentlige
}
Avatar billede arne_v Ekspert
30. juli 2007 - 19:54 #7
Avatar billede everclear Praktikant
30. juli 2007 - 20:15 #8
Det er super arne:-) Det virker perfekt nu....tusind tak. Smid lige et svar, så er der points:-)
Avatar billede arne_v Ekspert
30. juli 2007 - 20:21 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester