Пользовательское использование индексаторов []

Диспетчер отчетов был вокруг в течение довольно многих лет. Это записано в Delphi (по крайней мере, это было первоначально), и имеет компоненты, которые могут использоваться в Delphi, но применимы через ActiveX или dll с примерно любого языка. Теперь имеет собственную библиотеку.NET также. Имеет изящный служащий отчету веб-сервер, который можно настроить также. Разработчик gui стили немного грубо вокруг краев, но это работает. http://reportman.sourceforge.net/

8
задан Gavin 24 September 2009 в 05:45
поделиться

4 ответа

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"
20
ответ дан 5 December 2019 в 05:26
поделиться

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]);
    }
}
6
ответ дан 5 December 2019 в 05:26
поделиться

Если вы хотите использовать свой класс для управления состоянием сеанса 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>

Я видел этот метод, используемый для создания сжатых / зашифрованных состояний сеанса.

0
ответ дан 5 December 2019 в 05:26
поделиться

Индексаторы в C # - это свойства с именем this . Вот пример ...

public class Session {
   //...
   public string this[string key]
   {
      get { /* get it from the database */ }
      set { /* store it in the database */ }
   }
}
4
ответ дан 5 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: