2009-08-14 7 views
1

J'utilise plus d'une classe et j'ai besoin d'un ... disons stockage global pour toute la classe et la méthode. Est-ce la bonne façon de créer une classe statique pour le stockage?C# classe séparée pour le stockage

public static class Storage 
    { 
     public static string filePath { get; set; } 
    } 

Ou y a-t-il d'autres façons de le faire?

+0

que pensez-vous de stocker? –

+3

Voulez-vous dire que vous voulez une variable globale à travers laquelle vous pouvez accéder aux objets et aux méthodes? Si oui, vous pourriez enquêter en utilisant un singleton. –

+0

@Charlie Salts Merci –

Répondre

3

Si vous vraiment besoin de faire votre exemple un singleton alors voici comment vous le faites.

public class StorageSingleton 
{ 
    private static readonly StorageSingleton instance; 

    static StorageSingleton() { 
     instance = new Singleton(); 
    } 
    // Mark constructor as private as no one can create it but itself. 
    private StorageSingleton() 
    { 
     // For constructing 
    } 

    // The only way to access the created instance. 
    public static StorageSingleton Instance 
    { 
     get 
     { 
      return instance; 
     } 
    }   

    // Note that this will be null when the instance if not set to 
    // something in the constructor. 
    public string FilePath { get; set; } 
} 

La façon d'appeler et mettre le singleton est la suivante:

// Is this is the first time you call "Instance" then it will create itself 
var storage = StorageSingleton.Instance; 

if (storage.FilePath == null) 
{ 
    storage.FilePath = "myfile.txt"; 
} 

Vous pouvez aussi ajouter dans le constructeur ce qui suit pour éviter exception de référence null:

// Mark constructor as private as no one can create it but itself. 
private StorageSingleton() 
{ 
    FilePath = string.Empty; 
} 

Parole de Attention; faire quelque chose de global ou singleton va casser votre code à long terme. Plus tard, vous devriez vraiment vérifier le modèle de dépôt.

+0

Merci, exemple très détaillé. –

1

Vous devriez jeter un oeil au modèle référentiel:

http://martinfowler.com/eaaCatalog/repository.html

Une façon de mettre en œuvre ce modèle est l'utilisation des ORM de S.A. NHibernate:

https://web.archive.org/web/20110503184234/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/10/08/the-repository-pattern.aspx

+0

Merci, c'était rapide, je regarde maintenant. –

+0

Mais pour votre exemple, je pense que c'est trop pour moi. Je n'ai pas besoin de ce genre de stockage. –

3

Vous pouvez envisager d'utiliser le design pattern Singleton: Implementing Singleton in c#

par exemple.

using System; 
public class Singleton 
{ 
    private static Singleton instance; 
    private Singleton() {} 
    public static Singleton Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      instance = new Singleton(); 
     } 
     return instance; 
     } 
    } 
} 
0

Application Singleton à votre classe d'origine:

public class Storage 
{ 
    private static Storage instance; 
    private Storage() {} 
    public static Storage Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      instance = new Storage(); 
     } 
     return instance; 
     } 
    } 
    public string FilePath { get; set; } 
} 

utilisation:

string filePath = Storage.Instance.FilePath; 
0

J'aime voir que la mise en œuvre de singleton en C#.

public class Singleton 
{ 
    public static readonly Singleton instance; 

    static Singleton() 
    { 
     instance = new Singleton(); 
    } 

    private Singleton() 
    { 
     //constructor... 
    } 
} 

C# garantit que votre instance ne sera pas en outrepassée et vos garanties constructeur statiques que vous aurez votre propriété statique instancié avant la première fois qu'il est utilisé. Bonus: Il est threadsafe selon la conception du langage pour les constructeurs statiques, pas de double verrouillage vérifié :).

Questions connexes