2016-01-22 80 views
0

我正在爲學校作業,它涉及創建一個應用程序,如何創建它的某些限制。比如有一定數量的方法。我想我會說在發佈看起來沒有優化的代碼之前,事實上可以用較少的方法完成。空引用,學習OOP

無論如何,目前我有一個Northwind類,它處理來自數據庫的所有東西,在這種情況下,創建一個填充了Shipper對象的列表,然後使用另一個Northwind方法將其轉換爲隊列。 (這是我的意思,沒有優化,我可以從一開始就使用隊列,但我不允許)。但是,當我使用它時,會出現一個非常常見的錯誤。但我想不通爲什麼...

class Northwind 
{ 
    public Queue<Shipper> Queue { get; set; } 

    public List<Shipper> GetList() 
    { 
     var con = new SqlConnection("Data Source=DESKTOP-G5VBFCN;Initial Catalog=Northwind;Integrated Security=True"); 
     var cmd = new SqlCommand("SELECT CompanyName, Phone FROM Shippers",con); 
     con.Open(); 
     var reader = cmd.ExecuteReader(); 
     var ShipList = new List<Shipper>(); 

     while (reader.Read()) 
     { 
      var s = new Shipper 
      { 
       CompanyName = reader["CompanyName"].ToString(), 
       Phone = reader["Phone"].ToString() 
      }; 
      ShipList.Add(s); 
     } 
     con.Close(); 
     return ShipList; 
    } 
    public Queue<Shipper> GetQueue(List<Shipper> List) 
    { 
     Queue<Shipper> ShipperQueue = new Queue<Shipper>(List); 
     return ShipperQueue; 
    } 
} 

}

我用的是類在我Form1.cs的

public partial class Form1 : Form 
{ 
    Northwind db; 
    Shipper Shipper; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     db.Queue = db.GetQueue(db.GetList()); 
    } 

盡請注意到羅斯文數據庫;實際上是用綠色強調的。我剛開始學習OOP。感謝您花時間查看我的代碼。

+2

你永遠不會初始化'db' ... –

+0

@JeffMercado喔我想羅斯文分貝; Northwind db = new Northwind(); –

回答

1
Northwind db = new Northwind(); 

或者讓這個類是靜態的,你不需要自己初始化。

static class Northwind 
{ 
    public static Queue<Shipper> Queue { get; set; } 

    public static List<Shipper> GetList() 
    { 
     var con = new SqlConnection("Data Source=DESKTOP-G5VBFCN;Initial Catalog=Northwind;Integrated Security=True"); 
     var cmd = new SqlCommand("SELECT CompanyName, Phone FROM Shippers",con); 
     con.Open(); 
     var reader = cmd.ExecuteReader(); 
     var ShipList = new List<Shipper>(); 

     while (reader.Read()) 
     { 
      var s = new Shipper 
      { 
       CompanyName = reader["CompanyName"].ToString(), 
       Phone = reader["Phone"].ToString() 
      }; 
      ShipList.Add(s); 
     } 
     con.Close(); 
     return ShipList; 
    } 

    public static Queue<Shipper> GetQueue(List<Shipper> List) 
    { 
     Queue<Shipper> ShipperQueue = new Queue<Shipper>(List); 
     return ShipperQueue; 
    } 
} 

,並調用像

private void Form1_Load(object sender, EventArgs e) 
{ 
    Northwind.Queue = Northwind.GetQueue(Northwind.GetList()); 
} 
+0

Omg,感謝您給予這個提示,我不知道你可以讓類靜態化並使它們像那樣工作。謝謝。 –

+0

從技術上講,即使不使靜態類成爲靜態類,靜態成員也是允許的,但靜態類不允許使用非靜態成員。 – David

+0

Aravol是對的,但只有靜態方法的類也應該是靜態的。 – Scoregraphic