2014-04-22 40 views
0

聲明的類我有Form1 Singleton模式: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<int, Form1.Instance.Question> quest = quest = Form1.Instance.questions;,它強調Question。關鍵是在Form1中我有一些問題。並在EditQuestions窗體中我想編輯問題。在Dictionary<int, Question> questions我保存這些問題。我認爲我可以編輯EditQuestions表單中的問題,然後將編輯後的字典分配到Dictionary<int,Question> questionsForm1

+0

您可以發佈.questions'屬性是如何'宣佈,它被使用的代碼和VS高亮顯示,以及該VS給出的亮點錯誤消息?您在您的問題中缺少相關信息以正確分析它。 – LB2

+0

'Form1.Instance.Question'似乎是一個屬性(或字段)。但是你需要聲明一個帶有* types *的字典(a-ka是鍵的數據類型和值的數據類型)。什麼是「Form1.Instance.Question」的類型?它是問題類嗎?或者,也許,是一個嵌套類,一個-ka Form1.Question? – elgonzo

回答

0

問題出在你的字典的定義。

Dictionary<int, Form1.Instance.Question> quest 

在這裏,你實際上是要求到Form1的問題成員的引用,但Form1中沒有一個叫問題成員。 Form1所具有的是嵌套類型的問題。對於Dictionary的定義,你需要一個Type而不是一個對象引用。

改變你的字典是這樣,它應該工作

Dictionary<string, Form1.Question> quest 

此外,如果你使用.NET 4時,一個更清潔和更安全的方式來創建一個單獨的使用懶惰類,像這樣

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

private Form1() 
{ 
} 

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