将大类从静态转换为非静态的步骤是什么?

时间:2011-10-06 15:19:45

标签: c# .net multithreading static

我有一个相当大的开源类,我需要从静态转换为非静态。

我需要这样做的原因是使其线程安全;我想要每个线程的一个类副本。

通常,将C#库从静态转换为非静态的建议步骤是什么?

3 个答案:

答案 0 :(得分:2)

要编译吗?从所有成员中删除static应该这样做。

如果你想要更犹太的东西,那么你应该从所有的调用中获取通用参数并将它们移动到构造函数中。

对我来说似乎很简单。你有特定的问题吗?

答案 1 :(得分:2)

我已将数据层从静态类升级到无静态类。所以

1st:删除类和方法上的“static”关键字

第二:在旧的静态类中添加一个Singleton

public class Foo 
{

    #region Singleton

    Foo()
    {
    }

    public static Foo Instance
    {
        get
        {
            return Nested.instance;
        }
    }

    class Nested
    {
        static Nested() { }

        internal static readonly Foo instance = new Foo();
    }

    #endregion

第三:用Foo.Instance.DoSomething()代替Foo.DoSomething()

替换你的课程的每个电话。

第四:编译和利润

答案 2 :(得分:2)

我认为你所说的是,由于这是一个如此庞大的课程,因此想象一下如何做到这一点并不容易,所以你想要采取一些步骤。这是:

  1. 转换为Singleton
  2. 您需要通过替换每个术语来更正引用静态类的位置 使用单身getter MyClass的{​​{1}}。保留所有这些地方的清单,以便您可以轻松地重新访问它们。
  3. 在您找到的所有地方,找出如何最好地依赖注入MyClass.instance(),而不是使用MyClass.instance()全局引用它。
  4. 将您的课程单独演绎为规范课程。你所做的DI工作应该可以很容易地从单例getter交换到普通的构造函数。
  5. 现在开始一次使用多个实例并修复由此产生的高级并发问题。
  6. 在每个步骤之间运行测试框架。