辛格尔顿模式:Can';t看不到在Form中声明的类

本文关键字:看不到 Form 声明 模式 Can | 更新日期: 2023-09-27 17:59:35

我有Form1:的Singleton模式

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:Dictionary<int, Form1.Instance.Question> quest = quest = Form1.Instance.questions;时,它会在Question下加下划线。重点是在Form1中我有一些问题。在EditQuestions表格中,我想编辑问题。在Dictionary<int, Question> questions中,我保存这些问题。我认为我可以编辑EditQuestions表格中的问题,然后在Form1 中将编辑后的词典分配给Dictionary<int,Question> questions

辛格尔顿模式:Can';t看不到在Form中声明的类

问题在于字典的定义。

Dictionary<int, Form1.Instance.Question> quest

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

把你的字典改成这样,它应该可以工作

Dictionary<string, Form1.Question> quest

此外,如果您使用的是.NET4或更高版本,创建单例的一种更干净、更安全的方法是使用Lazy类,就像一样

private static readonly Lazy<Form1> SingletonInstance = new Lazy<Form1>(() => new Form1());
private Form1()
{
}
public static Form1 Instance
{
  get { return SingletonInstance.Value; }
}