【问题标题】:C# Singleton Form pattern, how to run 2 and more forms? [closed]C# 单例表单模式,如何运行 2 个或更多表单? [关闭]
【发布时间】:2013-03-11 03:54:19
【问题描述】:

我正在尝试同时运行多个单例表单,但遇到了问题。 我想运行几个相同的表单,因为它们是同一个对象,我不想制作几个单例对象(如果创建的对象很少,单例就会失去它的意义)。 我有这个单例形式的代码:

class SingletonForm : Form
{
    private static readonly SingletonForm instance = new SingletonForm();

    public static SingletonForm Instance
    {
        get
        {
            return instance;
        }
    }
}

我尝试过:

    SingletonForm f1 = SingletonForm.Instance;
    SingletonForm f2 = SingletonForm.Instance;
    f1.Show();
    Application.Run(f2);

但它只运行一种形式。

如何运行它才能同时运行 2 个或更多单例表单?如果可能的话(我的意思是很容易做到)?

附:有人告诉我这是可能的,我应该尝试一下。

【问题讨论】:

  • “多个单例形式”是矛盾的。显然,您实际上并不想要这里的单身人士。所以不要使用它。
  • 实际上,您可能需要一个特定表单的实例。
  • @Lloyd 是的 - 但是 OP 想要乘以实例化一个单例,这没有意义
  • @Charleh Yeh 你当然是对的。
  • 为什么要使用 f1.Show() 和 Application.Run(f2)?为什么不将 Show-Method 用于这两种形式?

标签: c# design-patterns


【解决方案1】:

这是Singleton模式,意味着你只能得到一个SINGLE对象。如果要获取 N* 个对象,只需将其从单例中删除并调用构造函数即可。

如果你真的想要,你可以创建某种混合静态,允许你设置可以返回的最大实例数。

public static int MaxInstances;
public static List<MyObject> instanceList;
public static MyObject GetInstance()
{
    //Fill the instance list up to the MaxInstances
}

但是,管理这将是困难的,并且可能会导致错误。我猜你也许可以传回实例的索引,然后也可以通过索引请求实例。但是,再一次,这似乎很容易出错,你应该像正常一样使用实例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多