Диспетчер отчетов был вокруг в течение довольно многих лет. Это записано в Delphi (по крайней мере, это было первоначально), и имеет компоненты, которые могут использоваться в Delphi, но применимы через ActiveX или dll с примерно любого языка. Теперь имеет собственную библиотеку.NET также. Имеет изящный служащий отчету веб-сервер, который можно настроить также. Разработчик gui стили немного грубо вокруг краев, но это работает. http://reportman.sourceforge.net/
It's actually pretty much the same as writing a typical property:
public class MySessionThing
{
public object this[string key]
{
//called when we ask for something = mySession["value"]
get
{
return MyGetData(key);
}
//called when we assign mySession["value"] = something
set
{
MySetData(key, value);
}
}
private object MyGetData(string key)
{
//lookup and return object
}
private void MySetData(string key, object value)
{
//store the key/object pair to your repository
}
}
The only difference is we use the keyword "this" instead of giving it a proper name:
public object MyProperty
^access ^(return) type ^name
modifier
public object this
^ditto ^ditto ^ "name"
From the MSDN documentation:
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]);
}
}
Если вы хотите использовать свой класс для управления состоянием сеанса ASP.NET, попробуйте реализовать класс SessionStateStoreProviderBase и интерфейс IRequiresSessionState . Затем вы можете использовать своего провайдера сеанса, добавив его в раздел system.web вашего web.config:
<sessionState cookieless="true" regenerateExpiredSessionId="true" mode="Custom" customProvider="MySessionProvider">
<providers>
<add name="MySessionProvider" type="MySession.MySessionProvider"/>
</providers>
</sessionState>
Я видел этот метод, используемый для создания сжатых / зашифрованных состояний сеанса.
Индексаторы в C # - это свойства с именем this
. Вот пример ...
public class Session {
//...
public string this[string key]
{
get { /* get it from the database */ }
set { /* store it in the database */ }
}
}