C# 类的可访问性不一致
我得到以下错误 可访问性不一致的错误:字段类型“Project3\u mineswipper.DB” 比现场更难接近 “Project3_扫雷舰.Form2.db” 下面是DB.cs中的代码C# 类的可访问性不一致,c#,winforms,access-modifiers,C#,Winforms,Access Modifiers,我得到以下错误 可访问性不一致的错误:字段类型“Project3\u mineswipper.DB” 比现场更难接近 “Project3_扫雷舰.Form2.db” 下面是DB.cs中的代码 class DB { private string connectionString; public string ConnectionString { get { return connectionString; } } private SqlC
class DB
{
private string connectionString;
public string ConnectionString
{
get { return connectionString; }
}
private SqlConnection connection;
public SqlConnection Connection
{
get { return connection; }
}
public DB()
{
connectionString="Data Source=NGFAJAR-PC\\FAJAR;Initial Catalog=DB;Integrated Security=True";
connection = new SqlConnection(connectionString);
}
}
这是Form2.cs的代码
public partial class Form2 : Form
{
public DB db; //it's here where I am getting the error
private Form3 form3;
public Form2()
{
db = new DB();
InitializeComponent();
}
...
}
最后,Form3.cs
public partial class Form3 : Form
{
private Form2 form2;
public Form3()
{
InitializeComponent();
}
public void loadData()
{
DataTable dt = form2.db.GetData();
dgvScore.DataSource = dt;
}
}
怎么了?我该怎么做才能修复它呢?
感谢您的关注和帮助。您需要将
类DB
声明为内部类DB
或公共类DB
您需要将类DB
声明为内部类DB
或公共类DB
更改您的DB类
public class DB
{
....
}
像这样改变你的DB类
public class DB
{
....
}
怎么了
类型DB
声明为class DB
,没有显式的访问修饰符。这可能很好。那么名称空间的直接成员(Project3\u mineswipper
)的默认可访问性是internal
。因此DB
是一个内部类
现在Form2
是一个public
类。公共意味着任何人,甚至是这个“程序”(这个程序集)之外的代码都可以看到Form2
。现在Form2
有一个字段db
,它也是public
。因此,db
在公共类中是公共的,因此可以从外部看到db
。但问题是:程序之外的人甚至不知道有一种叫做Project3\u mineswipper.DB
的类型。那么他们怎么能看到“秘密”类型的字段呢?这就是矛盾之处
我该怎么做才能修复它呢
使可访问性兼容,例如将字段更改为内部
,以便:
public partial class Form2 : Form
{
internal DB db;
...
}
怎么了
类型DB
声明为class DB
,没有显式的访问修饰符。这可能很好。那么名称空间的直接成员(Project3\u mineswipper
)的默认可访问性是internal
。因此DB
是一个内部类
现在Form2
是一个public
类。公共意味着任何人,甚至是这个“程序”(这个程序集)之外的代码都可以看到Form2
。现在Form2
有一个字段db
,它也是public
。因此,db
在公共类中是公共的,因此可以从外部看到db
。但问题是:程序之外的人甚至不知道有一种叫做Project3\u mineswipper.DB
的类型。那么他们怎么能看到“秘密”类型的字段呢?这就是矛盾之处
我该怎么做才能修复它呢
使可访问性兼容,例如将字段更改为内部
,以便:
public partial class Form2 : Form
{
internal DB db;
...
}
或者可以从public DB更改字段代码>进入内部数据库代码>。没有必要总是通过使事情更容易访问来解决这个问题@JeppeStigNielsen当然可以——但考虑到提供的信息,答案是public
。更多的信息可能会建议更低的可访问性。很可能,因为这些都是他正在处理的表单
,所以他所有的公共
都可能是内部
。这似乎超出了这个问题的范围,或者可能将字段从publicdb代码>进入内部数据库代码>。没有必要总是通过使事情更容易访问来解决这个问题@JeppeStigNielsen当然可以——但考虑到提供的信息,答案是public
。更多的信息可能会建议更低的可访问性。很可能,因为这些都是他正在处理的表单
,所以他所有的公共
都可能是内部
。但这似乎超出了这个问题的范围。