C# 类的可访问性不一致

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

我得到以下错误

可访问性不一致的错误:字段类型“Project3\u mineswipper.DB” 比现场更难接近 “Project3_扫雷舰.Form2.db”

下面是DB.cs中的代码

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
。更多的信息可能会建议更低的可访问性。很可能,因为这些都是他正在处理的
表单
,所以他所有的
公共
都可能是
内部
。但这似乎超出了这个问题的范围。