关于其实例的静态参数化类会发生什么?

时间:2011-03-11 13:35:28

标签: c# .net generics type-parameter static-classes

假设我有这门课程:

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 个答案:

答案 0 :(得分:2)

  

我只有一个实例   每种类型的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 :(得分:1)

您可以拥有任意数量的DispatcherService实例,因为该类可以自由实例化。另一个问题是没有意义,因为它没有实例方法。如果不打算实例化,可以将其更改为public static class DispatcherService<T>,如本例所示。

每种类型最多只有一个DispatcherService.Dispatcher个实例,这是您可能想知道的。如果您未针对特定DispatcherService访问T,则不会为T分配任何资源。