C# 可访问性不一致:return 类型的可访问性低于方法
C# Inconsistent accessibility: return type is less accessible than method
我正在为我的学习开发一个应用程序。现在我刚刚启动了一个应用程序,在那里我得到了一个包含足球联赛和俱乐部等的数据库。现在我有一个俱乐部和球员的名单,现在我试图添加更多的联赛,然后只有 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;
}
这是相同的代码,只是俱乐部中的查询使用了列表框中的选定项目,但任何人都知道为什么我在第一个列表中出现此错误:
Error CS0050 Inconsistent accessibility: return type
'List<Competitie>
' is less accessible than method
'DatabaseManager.GetAllCompetities()
'
class 的代码:
class Competitie
{
public int IdCompetitie { get; set; }
public string NaamCompetitie { get; set; }
public override string ToString()
{
return string.Format("{0}", NaamCompetitie);
}
}
你必须让你的 class public:
public class Competitie
如果您不指定访问修饰符,它默认为 internal
(i.e.accessible 仅在它编译到的程序集中)。
如错误所述,class 必须至少与 returns 它的方法一样易于访问。
按照你现在的方式,可以调用 GetAllCompetities() 方法(因为它是 public)的代码有可能无法访问方法 [=35] 的 class =].显然这不是合乎逻辑的情况 - 调用代码将无法使用或理解它返回的数据。
N.B。根据上下文,将 GetAllCompetities() 方法标记为 internal
以匹配 class 实际上可能更合适。这样 none 就可以在程序集外访问了。不过,这完全取决于您的情况和您的需要。我只是为了完整性而指出这一点。它会解决错误,但会导致这些代码段的可访问性级别不同。
这是 C# 访问修饰符的文档:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/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;
}
这是相同的代码,只是俱乐部中的查询使用了列表框中的选定项目,但任何人都知道为什么我在第一个列表中出现此错误:
Error CS0050 Inconsistent accessibility: return type '
List<Competitie>
' is less accessible than method 'DatabaseManager.GetAllCompetities()
'
class 的代码:
class Competitie
{
public int IdCompetitie { get; set; }
public string NaamCompetitie { get; set; }
public override string ToString()
{
return string.Format("{0}", NaamCompetitie);
}
}
你必须让你的 class public:
public class Competitie
如果您不指定访问修饰符,它默认为 internal
(i.e.accessible 仅在它编译到的程序集中)。
如错误所述,class 必须至少与 returns 它的方法一样易于访问。
按照你现在的方式,可以调用 GetAllCompetities() 方法(因为它是 public)的代码有可能无法访问方法 [=35] 的 class =].显然这不是合乎逻辑的情况 - 调用代码将无法使用或理解它返回的数据。
N.B。根据上下文,将 GetAllCompetities() 方法标记为 internal
以匹配 class 实际上可能更合适。这样 none 就可以在程序集外访问了。不过,这完全取决于您的情况和您的需要。我只是为了完整性而指出这一点。它会解决错误,但会导致这些代码段的可访问性级别不同。
这是 C# 访问修饰符的文档:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/access-modifiers