单例模式:无法看到在Form中声明的类

时间:2014-04-22 13:51:06

标签: c# .net winforms singleton

我有Form1的单一模式:

private Form1()
        {
            InitializeComponent();
        }
        private static Form1 _Instance;
        public static Form1 Instance
        {
            get
            {
                if (_Instance == null)
                    _Instance = new Form1();
                return _Instance;
            }
        }

另外,我有下一个以主窗体Form1声明的类:

public class Question
    {
        public Question(string q_text, Dictionary<string, bool> ans)
        {
            text = q_text;
            answers = ans;
        }
        public string text { get; set; }
        public Dictionary<string, bool> answers { get; set; }
    }

但是,当我在表单EditQuestions中想要声明这样的字典:Dictionary<int, Form1.Instance.Question> quest = quest = Form1.Instance.questions;时,它会强调Question。要点是在Form1中我有一些问题。以EditQuestions形式,我想编辑问题。在Dictionary<int, Question> questions我保存了这些问题。我认为我可以用EditQuestions形式编辑问题,然后将编辑后的字典分配到Dictionary<int,Question> questions

中的Form1

1 个答案:

答案 0 :(得分:0)

问题在于字典的定义。

Dictionary<int, Form1.Instance.Question> quest

在这里,您实际上是在询问对Form1的问题成员的引用,但Form1没有名为Question的成员。 Form1具有的是嵌套类型的问题。对于Dictionary的定义,您需要一个Type而不是一个对象引用。

将您的词典更改为此,它应该可以正常工作

Dictionary<string, Form1.Question> quest

此外,如果您使用的是.NET 4或更高版本,创建单例的更简洁和更安全的方法是使用Lazy类,如此

private static readonly Lazy<Form1> SingletonInstance = new Lazy<Form1>(() => new Form1());

private Form1()
{
}

public static Form1 Instance
{
  get { return SingletonInstance.Value; }
}