空引用,学习 OOP

本文关键字:OOP 学习 引用 | 更新日期: 2023-09-27 18:31:26

我正在为学校做作业,它涉及创建一个应用程序,对如何创建它有一定的限制。例如具有一定数量的方法。我想我会在发布看起来未优化的代码之前说,实际上可以用更少的方法完成。

无论如何,目前我有一个 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 db; 实际上是用绿色下划线的。我刚开始学习OOP。感谢您抽出宝贵时间查看我的代码。

空引用,学习 OOP

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());
}