我在理解访问修饰符时遇到了一些麻烦;我想知道什么时候使用什么级别的访问权限,特别是对于属性 - 只需链接到好的关于该主题的教程可能是它自己的问题。将对象绑定到WinForms控件和访问修饰符
但更具体地说,我不明白为什么绑定到WinForm控件的对象必须是公共的。所以我创造我的对象:
public class Foos : List<Foo>
{
}
public class Foo
{
private int bar;
public int Bar
{
get { return bar; }
set { bar = value; }
}
}
然后将其绑定到DataGridView
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
?如果我使它我得到一个空的dataGridView1。如果我做到了protected
我得到一个编译器错误,因为当然Form1不是从Foo派生的。
虽然我的程序中的窗体中的控件如何与internal的定义不匹配?
内部成员只能在同一个 程序集的文件中访问。
关于如何以系统方式进行这些声明的一般智慧也受到欢迎。
感谢您的明确解释。我想我出于某种原因认为一个属性可以取代一个类访问级别。 – downwitch 2012-02-29 00:09:07
这是令人困惑的,我同意。很高兴你把它整理出来。 – AVIDeveloper 2012-03-01 15:06:05