C#不一致的可访问性:返回类型比方法更难访问

时间:2018-12-13 12:11:41

标签: c# .net access-modifiers

我正在为我的研究开发应用程序。现在,我刚刚启动了一个应用程序,在该应用程序中,我获得了与足球联赛和俱乐部等相关的数据库。现在,我在俱乐部和球员列表中有了一个清单,现在我正尝试添加更多的联赛,而当时只有1个。做同样的事,然后再做。 这是无效列表的代码:

public List<Competitie> GetAllCompetities()
        {
            List<Competitie> Competitie = new List<Competitie>();
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                connection.Open();
                string query = "Select * from competitie";
                MySqlCommand selectallcompetitiecommand = new MySqlCommand(query, connection);
                MySqlDataReader reader = selectallcompetitiecommand.ExecuteReader();
                while (reader.Read())
                {
                    Competitie comp = new Competitie();
                    comp.IdCompetitie = reader.GetInt32(0);
                    comp.NaamCompetitie = reader.GetString(1);
                    Competitie.Add(comp);
                }
            }
            return Competitie;
        }

然后这是该俱乐部正在工作的代码:

public List<Clubs> GetAllClubs(string selecteditem)
        { //Zorgt voor alle dingen van de tabel clubs.
            List<Clubs> Clubs = new List<Clubs>();
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {  
                connection.Open();
                string query = "Select * from databasevoetbal.clubs where competitie.naamcompetie = '" + selecteditem + "' and clubs.idcompetitie = competitie.idcompetitie";
                MySqlCommand selectAllClubsCommand = new MySqlCommand(query, connection);
                MySqlDataReader reader = selectAllClubsCommand.ExecuteReader();
                while (reader.Read())
                {
                    Clubs Club = new Clubs();
                    Club.idClubs = reader.GetInt32(0);
                    Club.NaamClubs = reader.GetString(1);
                    Club.aantalkampioenschappen = reader.GetInt32(2);
                    Club.opgericht = reader.GetInt32(3);
                    Club.idcompetitie = reader.GetInt32(4);
                    Clubs.Add(Club);
                }
            }
            return Clubs;
        }

这是相同的代码,只是俱乐部中的查询使用了列表框中的选定项目,但谁都知道为什么我在第一个列表中出现此错误:

  

错误CS0050可访问性不一致:返回类型   'List<Competitie>'比方法更难访问   'DatabaseManager.GetAllCompetities()'

课程代码:

class Competitie
    {
        public int IdCompetitie { get; set; }
        public string NaamCompetitie { get; set; }

        public override string ToString()
        {
            return string.Format("{0}", NaamCompetitie);
        }
    } 

1 个答案:

答案 0 :(得分:4)

您必须公开课程:

public class Competitie

如果您未指定access修饰符,则默认为internal(即只能在其编译为的程序集中访问)。

如错误所述,该类必须至少与返回它的方法具有相同的可访问性。

您现在所拥有的方式,有可能调用GetAllCompetities()方法的代码(因为它是公共的)无法访问该方法返回的类。显然,这不是逻辑上的情况-调用代码将无法使用或理解它返回的数据。

根据上下文的不同,实际上更合适的做法是将GetAllCompetities()方法标记为internal以匹配该类。这样,在程序集外部都无法访问它。不过,这完全取决于您的情况和需要。我只是为了完整起见。可以解决该错误,但会导致这些代码段具有不同级别的可访问性。

以下是C#访问修饰符的文档:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/access-modifiers