У меня проблемы с пониманием модификаторов доступа;Я хочу знать лучше, когда использовать какой уровень доступа, особенно для свойств - просто ссылки на хорошие учебники по этой теме могут быть отдельным вопросом.
Но, более конкретно, я нене понимаю, почему объект, связанный с элементом управления 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
вне моей сборки?Если я сделаю это internal int Bar
, я получу пустой dataGridView1.Если я сделаю это protected
, я получу ошибку компилятора, потому что, конечно, Form1 не является производным от Foo.
Как элемент управления в форме в моей программе не соответствует определению internal ?
Внутренние элементы доступны только в файлах одной и той же сборки.
Общая мудрость относительно систематического представления этих объявлений также приветствуется.