9
votes

Utilisation personnalisée des indexeurs []

Je veux créer un objet qui fonctionnera de la même manière que la session ASP.NET.

Dis que j'appelle cet objet MySession, je veux le faire, alors que vous faites P>

mySession["Username"] = "Gav"


1 commentaires

5 Réponses :


6
votes

du Documentation MSDN :

class SampleCollection<T>
{
    // Declare an array to store the data elements.
    private T[] arr = new T[100];

    // Define the indexer, which will allow client code
    // to use [] notation on the class instance itself.
    // (See line 2 of code in Main below.)        
    public T this[int i]
    {
        get
        {
            // This indexer is very simple, and just returns or sets
            // the corresponding element from the internal array.
            return arr[i];
        }
        set
        {
            arr[i] = value;
        }
    }
}

// This class shows how client code uses the indexer.
class Program
{
    static void Main(string[] args)
    {
        // Declare an instance of the SampleCollection type.
        SampleCollection<string> stringCollection = new SampleCollection<string>();

        // Use [] notation on the type.
        stringCollection[0] = "Hello, World";
        System.Console.WriteLine(stringCollection[0]);
    }
}


0 commentaires

22
votes

C'est en fait la même chose que d'écrire une propriété typique: xxx

La seule différence est que nous utilisons le mot-clé "Ceci" au lieu de lui donner un nom propre: < Pré> xxx


2 commentaires

C'est génial ça ressemble à ce que je suis après. Une question est-elle possible de l'utiliser sans avoir à déclarer une instance de la classe? J'ai essayé de le rendre statique mais cela ne semblait pas marcher.


Non, vous ne pouvez pas faire cela sans déclarer une instance. Voir Stackoverflow.com/Questtions/ 154489 / ...



4
votes

indexeurs en C # sont des propriétés avec le nom ceci code>. Voici un exemple ...

public class Session {
   //...
   public string this[string key]
   {
      get { /* get it from the database */ }
      set { /* store it in the database */ }
   }
}


0 commentaires

0
votes

Si vous souhaitez utiliser votre classe pour contrôler l'état de session ASP.NET, recherchez pour implémenter le SessionStatStoreProviderBase classe et IREQUIRESESSTETTE interface. Vous pouvez utiliser votre fournisseur de session en ajoutant ceci à la section System.Web de votre web.config: xxx

J'ai vu cette technique utilisée pour créer des états de session compressés / cryptés. < / p>


0 commentaires

1
votes

Voici ma légère variation de l'exemple MSDN: XXX PRE>

Classe de la personne: P>

 static void Main( string[] args )
        {
            KeyValueIndexer<string, object> _keyVal = new KeyValueIndexer<string, object>();
            _keyVal[ "Person" ] = new Person() { FirstName="Jon", LastName="Doe", MiddleName="S" };
            _keyVal[ "MyID" ] = 123;
            Console.WriteLine( "My name is {0} {1}, {2}", ( ( Person ) _keyVal   [ "Person" ] ).FirstName, ( ( Person ) _keyVal[ "Person" ] ).MiddleName, ( ( Person ) _keyVal[ "Person" ] ).LastName );
            Console.WriteLine( "My ID is {0}", ( ( int ) _keyVal[ "MyID" ] ) );
            Console.ReadLine();
        }


0 commentaires