返回类型为对象的方法

时间:2018-03-03 02:08:48

标签: c# oop

我尝试了这个(https://stackoverflow.com/a/14172067/7482204)方法,但我似乎无法弄清楚如何使用类名作为返回类型来调用该方法。

Item.cs:

class Item
{
    public Item GetItem(string parameter) 
    {
        Item itemObj = new Item();

        string query = "select * from items where model = @model";
        try
        {
            using (MySqlConnection connection = Connection.GetConnection()) 
            {
                using (MySqlCommand cmd = new MySqlCommand(query,connection)) 
                {
                    cmd.Parameters.AddWithValue("@model",parameter);
                    using (MySqlDataReader reader = cmd.ExecuteReader()) 
                    {
                        while (reader.Read()) 
                        {
                            itemObj.Id = int.Parse(reader["id"].ToString());
                            itemObj.Model = reader["model"].ToString();
                            itemObj.Brand = reader["brand"].ToString();
                            itemObj.CategoryId = int.Parse(reader["category_id"].ToString());
                            itemObj.SubCategoryId = int.Parse(reader["sub_category_id"].ToString());
                            itemObj.HasSerialNumber = (int.Parse(reader["serialized"].ToString()) == 1 ? true : false);
                        }
                    }
                }
            }
        }
        catch (Exception ex) 
        {
            throw new ArgumentException(ex.Message);
        }
        //Console.WriteLine("End"+itemObj.Model);
        return itemObj;
    }
}

然后我试图访问方法GetItem

Item itemObj = GetItem("params");

但我发现错误"然后名称GetItem在当前上下文中不存在"

2 个答案:

答案 0 :(得分:4)

将GetItem更改为静态,然后您应该能够将其称为

Item item = Item.GetItem("params")

在相关的说明中,根据单一责任委托人(SRP),类项目不应对其持久性负责。所以最好将它分成2个类,Item和ItemsRepository或类似的。然后,您应该能够创建存储库的实例并在该实例上调用GetItem(不使用static

class ItemsRepository
{
    public Item GetItem(string params)
    {
         ....
    }
}


 var repo = new ItemsRepo();
 var item = repo.GetItem("params");

答案 1 :(得分:2)

GetItem是一个实例方法,这意味着您需要已有一个项目实例,然后在其上调用yourItem.GetItem("params")。听起来您只想将GetItem设置为静态方法,以便可以在任何项目实例之外访问它,如下所示:Item yourItem = Item.GetItem("params")。为此,请将public Item GetItem(string parameter)更改为public static Item GetItem(string parameter)。绝对值得重新考虑将您的数据访问和映射逻辑直接捆绑到您的项目模型中,但这是您没有问过的另一个问题。