Condivisione di oggetti info tra oggetti?

2

Sto facendo un gioco e ho diverse carte che vengono create durante il gioco. Ogni carta ha bisogno di alcune informazioni, che sono condivise tra carte dello stesso tipo.

Quindi ho una classe CardInfo, che tiene tra le altre cose un nome. Ora sto cercando il modo migliore per ottenere il CardInfo esistente in base al nome o se non ne esiste ancora uno che sia stato creato in quel momento.

Al momento ho provato due modi, che sono praticamente uguali.

Per prima cosa ho avuto un CardInfoManager , che conteneva un elenco di tutti CardInfo noti, e quando è stato chiesto per uno, ha verificato se ne avesse uno, e lo ha restituito o creato uno nuovo se non ne esisteva nessuno. Ho questo come una classe completamente statica e come un singleton con un metodo Instance .

Ho anche fatto un'alternativa, in cui il mio CardInfoManager (la versione statica) è fondamentalmente all'interno della mia classe CardInfo . Quindi CardInfo aveva un metodo ByName , che poi controllava un elenco statico in CardInfo . Questo è bello perché posso rendere privato il cosntructor, assicurandoti che le informazioni non vengano mai create altrove.

Quindi mi stavo chiedendo, qual è il modo migliore per farlo? C'è un buon modello per questo tipo di funzionalità?

Sto lavorando in c #.

    
posta The Oddler 25.04.2015 - 18:34
fonte

2 risposte

2

Per ottenere un oggetto per nome, inserisci i tuoi oggetti in un dizionario.

var dict = new Dictionary<string, CardInfo>();

Ci sono diversi modi per aggiungere gli oggetti CardInfo al dizionario. Eccone uno:

dict.Add("cardname", new CardInfo { foo = 1, bar = 2 }); 

Li recuperi in questo modo:

var cardInfo = dict.Item("cardname");

o

var cardInfo = dict["cardname"];

Ulteriori letture
Dizionario <TKey, TValue> Classe

    
risposta data 25.04.2015 - 20:17
fonte
1

Sono d'accordo con il suggerimento di Robert di usare Dictionary come ricerca classica per le collezioni basate sulla memoria.

Sul punto del singleton. Utilizza singleton per contesa di risorse, prestazioni e contesto Se ritieni che la tua applicazione possa creare molte istanze di cardInfo ancora e ancora, puoi gestire un singleton in sicurezza, quindi usarlo. Considerare il problema con più thread quando si usano i singleton.

    
risposta data 25.04.2015 - 21:09
fonte

Leggi altre domande sui tag