将对象绑定到WinForms控件和访问修饰符
本文关键字:访问 控件 对象 绑定 WinForms | 更新日期: 2023-09-27 18:25:38
我在理解访问修饰符方面遇到了一些困难;我想知道什么时候使用什么级别的访问权限,尤其是对属性的访问权限——只是链接到关于该主题的好教程可能是个问题。
但更具体地说,我不明白为什么绑定到WinForm控件的对象必须是公共的。所以我创建了我的对象:
public class Foos : List<Foo>
{
}
public class Foo
{
private int bar;
public int Bar
{
get { return bar; }
set { bar = value; }
}
}
然后将其绑定到CCD_ 1
public partial class Form1 : Form
{
private Foos formFoos;
public Form1()
{
InitializeComponent();
formFoos = new Foos();
AddFoo();
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = formFoos;
}
/// <summary>
/// generate some test values
/// </summary>
private void AddFoo()
{
for (int i = 1; i <= 5; i++)
{
Foo foo = new Foo();
foo.Bar = 5 * i;
formFoos.Add(foo);
}
}
}
工作良好。但是,如果我不想将Foo.Bar
暴露在程序集之外,该怎么办?如果我把它设为internal int Bar
,我会得到一个空的dataGridView1。如果我把它设为protected
,我会得到一个编译器错误,因为Form1当然不是从Foo派生的。
我的程序中表单中的控件如何与内部的定义不匹配?
内部成员只能在同一装配
关于你如何以系统的方式发表这些宣言的普遍智慧也受到欢迎。
您应该将整个Foo
类标记为internal
。
这样,整个Foo
类及其所有成员都将在程序集外部不可见。
Form1.dataGridView1
需要Foo.Bar
是公共的,否则它将无法使用它。
现在,因为DataGridView
0已经标记为internal
,所以它可以将Bar
暴露为public
,而不存在将其暴露在程序集外部的风险。
这应该会让Form1.dataGridView1
和你同样快乐。
- 请注意,通过将
Foo
标记为internal
,Foos
也应该从public
更改为internal
,因为Foos
的访问级别可能不高于其派生的类