无效,学习OOP

时间:2016-01-22 16:51:24

标签: c# windows forms 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());
    }

请注意Northwind数据库;实际上是绿色下划线。我刚开始学习OOP。感谢您花时间查看我的代码。

1 个答案:

答案 0 :(得分: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());
}