Что происходит в статическом параметризованном классе относительно его экземпляра? - PullRequest
0 голосов
/ 11 марта 2011

Предположим, у меня есть этот класс:

public class DispatcherService<T>
{
    private static Action<T> Dispatcher;

    public static void SetDispatcher(Action<T> action)
    {
        Dispatcher = action;
    }

    public static void Dispatch(T obj)
    {
        Dispatcher.Invoke(obj);
    }
}

Позвольте мне получить это прямо ... У меня будет только один экземпляр DispatcherService<T> для каждого типа, и только когда я его вызову. Правильно?

Просто спрашиваю о проблемах с памятью.

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

У меня будет только один экземпляр DispatcherService для каждого типа

Да.

и только при его вызове.Правильно?

Да.

Код выдается CLR, когда ему необходимо его использовать.


Примечание

, если ягде вы меняли бы его на синглтон .

public class DispatcherService<T>
{

    private static readonly DispatcherService<T> _dispatcher = new DispatcherService<T>();
    private Action<T> _action;

    private DispatcherService() {}

    public static DispatcherService<T> Dispatcher
    {
        get {return _dispatcher ;}
    }

    public void SetDispatcher(Action<T> action)
    {
        Dispatcher = action;
    }

    public void Dispatch(T obj)
    {
        Dispatcher.Invoke(obj);
    }
}
1 голос
/ 11 марта 2011

Вы можете иметь столько экземпляров DispatcherService, сколько захотите, так как класс можно создавать свободно.Другое дело, что в этом нет никакого смысла, потому что у него нет методов экземпляра.Вы можете изменить его на public static class DispatcherService<T>, если он не предназначен для создания экземпляра, как в этом примере.

У вас также будет не более одного экземпляра DispatcherService.Dispatcher для каждого типа, что вы, вероятно, захотитезнать.Если у вас нет доступа к DispatcherService для определенного T, ресурсы для этого T.

не будут выделяться.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...