返回类型比方法更难访问

时间:2011-07-24 02:32:35

标签: c# .net

我是c#的新手,这是我正在努力获得一些经验的个人项目的摘录。

在此类之外调用getRecipe()函数时,出现以下错误。我希望将List私密保留到CookBook课程,但仍然可以引用Recipes中的List之一。我不想让List公开。

非常感谢任何建议!感谢


错误

return type 'cookbook.Recipe is less accessible than method 'cookbook.CookBook.getRecipe(string)'

public class CookBook
{
    private List<Recipe> listOfRecipes = new List<Recipe> {};
    public Recipe getRecipe(string name)
    {
        int i = 0;
        while (listOfRecipes[i].getRecipeName() != name)
        {
            i++;
        }
        return listOfRecipes[i];
    }
}

9 个答案:

答案 0 :(得分:131)

Recipe课程公开。

答案 1 :(得分:9)

您的Recipe类比方法更难访问。您应该检查Recipe不是私有/内部的,并且您可以从该类范围之外看到Recipe类(快速修复声明Recipe是公共类)。

正如Michael Stum在下面的评论中指出的那样,没有访问修饰符的类默认为内部或私有(如果它是嵌套类)。这可能是您的问题所在,您可能刚刚宣布class Recipe而不是public class Recipe

答案 2 :(得分:2)

语法错误?

private List<Recipe> listOfRecipes = new List<Recipe> {};

应该是:

private List<Recipe> listOfRecipes = new List<Recipe>();

另外,你可以简单地使用LINQ来获得你的结果,我不在VS中,但是这样的......

public Recipe getRecipe(string name)
{
    return listOfRecipes.Where(c => c.RecipeName == name).SingleOrDefault();
}

答案 3 :(得分:2)

正如错误消息明确指出的那样,Recipe类比您的方法更难以访问(例如,不是public)。

答案 4 :(得分:0)

public DataSet Country12()
    {

        LntSqlClient mySqlClient = new LntSqlClient(ConfigurationManager.AppSettings.Get("Data source=172.31.60.228;initial catalog=Trainee;Trusted_Connection=True;"));
        LntSqlParams myParam = new LntSqlParams();
        DataSet dset = new DataSet();
        //string strout;
        try
        {
            myParam.SPName = "dbo.GetState7";
            myParam.addParameter("@CityId", ddlCity9.SelectedValue, mySqlClient);

            dset = mySqlClient.lntDataSet(myParam);
            //strout = myParam.LntSQLOutputParams("@error").Value.ToString();
            return dset;
        }


        catch (Exception ex)
        { throw ex; }
        finally
        { mySqlClient.closeConnection(); }
    }

答案 5 :(得分:0)

让你的班级公开..没有你不能归还任何东西

答案 6 :(得分:0)

检查以确定“配方”的可见度范围。 class是你想要访问它的地方。

答案 7 :(得分:0)

在C#中,类默认是private,所以访问级别是有限制的。 将您的模型类声明为公共(配方)为 public

答案 8 :(得分:-1)

将方法设为内部。希望它能奏效。