Comment utiliser cette Classe Singleton en C#?
J'ai du mal avec l'aide de modèle de conception Singleton. Je suis en train de l'utiliser dans cette simple application console. J'ai un problème avec elle dans la méthode main de la classe de programmes. Je veux définir un objet de la classe Singleton tels que: var data = Singleton.Instance;
mais je ne sais pas pourquoi je ne peux pas le faire
Aussi, je ne sais pas pourquoi je reçois le message d'erreur suivant lorsque je lance le programme:
Unhandled Exception: System.NullRefernceException: Object reference not
set to an instance of an object.
Alors, comment résoudre ce problème?
Classe Singleton:
namespace Singleton
{
class Singleton
{
//Variable
private static Singleton instance;
private List<string> Messages;
//Constructor
private Singleton() { }
//Property
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
//Methods
public void Message(string message)
{
Messages.Add(message);
}
public bool HasMessage(string message)
{
return Messages.Contains(message);
}
}
}
Programme De La Classe:
namespace Singleton
{
class Program
{
static void Main(string[] args)
{
var data = Singleton.Instance;
Singleton.Instance.Message("Hello World!!!");
if(Singleton.Instance.HasMessage("12"))
Console.WriteLine("NO STRING!!!");
else
Console.WriteLine("There is a match");
}
}
}
Mise à JOUR:
Les gars, j'apprécie vraiment votre aide pour l'instant. Le programme fonctionne maintenant, mais la logique n'est pas de travail. Si vous regardez le programme principal, vous verrez que la liste a seulement "Hello World!!!". Cependant, lorsque j'ai utilisé la HasMessage méthode ne fonctionne pas. Parce que le programme continue de s'afficher "Il y a un match". Mais il devrait m'afficher "PAS de STRING!!!" comme il n'y a pas de match. Alors, comment résoudre ce problème?
Messages.Add(message);
mais vous n'avez jamais initialiser Messages
à quoi que ce soit. Peut-être que dans le constructeur, ou dans votre déclaration de Messages
.Pour info, votre singleton mise en œuvre n'est pas thread-safe (ignorer si ce n'est pas un problème, mais pourquoi ne pas construire mieux si vous pouvez?): csharpindepth.com/articles/general/singleton.aspx
OriginalL'auteur Technology Lover | 2013-01-15
Vous devez vous connecter pour publier un commentaire.
Votre champ
Messages
n'est pas initialisé à quoi que ce soit. C'est pourquoi vous obtenez une exception. Dans votre classe:Vous pouvez également consulter Thread-Safe Singleton mise en œuvre de Jon Skeet
EDIT:
Basée sur la mise à jour de question. Votre Chèque et le Message sont à l'opposé. Il doit être:
Votre méthode
HasMessage
renvoie true si le paramètre passé est présent dans la liste et false sinon.Merci pour votre aide et le lien. Le lien est très utile. Pourriez vous s'il vous plaît vérifier mes mises à jour question que j'ai du mal avec la logique?
votre chèque et le Message sont à l'opposé. Ses un simple changement. Vérifiez le fichier de réponse
Merci beaucoup pour votre aide.
vous êtes les bienvenus
OriginalL'auteur Habib
Il semble que vous y êtes presque. Envisagez de réécrire ton code comme ceci:
Il y a quelques utiles C# tutoriels pour les modèles de conception sur ce site.
OriginalL'auteur jake
Cela devrait vraiment être une question distincte, mais je vais répondre quand même. Vous avez votre état de marche arrière. Votre code est dit d'écrire "pas de chaîne" si l'instance ne contenir le message "12", et "Il y a un match" s'il ne pas. Essayez ceci:
OriginalL'auteur phoog
Ici est votre problème. Le membre n'a jamais été instanciée dans votre code. Vous pourriez faire comme suit:
Aussi je vous suggère d'utiliser correctement les conventions de nommage de vos variables locales et les membres. Changement
instance
àm_Instance
etMessages
àm_Messages
. Essayez également de mettre en œuvre des singletons dans un "thread-safe" de la sorte... pour plus d'informations regardez cette page.OriginalL'auteur Tommaso Belluzzo
C'est la mise en œuvre de Singleton:
Comment invoquer et de créer une instance?
OriginalL'auteur jasmintmp