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"
5 Réponses :
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]); } }
C'est en fait la même chose que d'écrire une propriété typique: La seule différence est que nous utilisons le mot-clé "Ceci" au lieu de lui donner un nom propre: P> < Pré> xxx pré> p>
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 / ...
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 */ }
}
}
Si vous souhaitez utiliser votre classe pour contrôler l'état de session ASP.NET, recherchez pour implémenter le SessionStatStoreProviderBase classe et J'ai vu cette technique utilisée pour créer des états de session compressés / cryptés. < / p> p>
Voici ma légère variation de l'exemple MSDN: 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();
}
Duplicailler possible de Comment surcharger l'opérateur de support carré en C #?