alsoijw, если можешь поправить, поправь, ты не совсем корректно описал проблему.
дело в том, что это баг GTK+ 3.0, точнее, как я предполагаю gtk+-3.0.vapi
этот код, как и надо, показывает ошибку
namespace Namespace1
{
private int a;
}
namespace Namespace2
{
public static int main (string[] args)
{
Namespace1.a = 10; /** Ошибка доступа к a, всё идёт по плану. Vala шлёт нас куда подальше */
stdout.printf(a);
return 0;
}
}
using Gtk;
/** все поля и методы приватные*/
namespace GUI
{
private string str;
private Label label;
private Button button;
private int variable;
private string get_str()
{
str = "Приватная строка";
return str;
}
}
namespace Appl
{
public static int main (string[] args)
{
Gtk.init (ref args);
var window = new Window();
window.title = "Sample";
window.window_position = WindowPosition.CENTER;
window.destroy.connect(Gtk.main_quit);
window.set_resizable(false);
var grid = new Grid();
GUI.variable = 100; /** Тут по идее должна быть ошибка */
stderr.printf("Печатаем приватный int: %d\n", GUI.variable);
GUI.button = new Button.with_label("Кнопка"); /** Обращение к private GUI.button */
GUI.button.clicked.connect(() => /** Ещё раз */
{
GUI.label.set_text(GUI.get_str()); /** Ещё два раза */
}
);
grid.attach(GUI.button, 0, 0, 1, 1); /** Ещё раз */
GUI.label = new Label.with_mnemonic("Это строка"); /** Ещё раз */
grid.attach(GUI.label, 1, 0, 1, 1); /** И ещё раз */
window.add(grid);
window.show_all();
Gtk.main();
return 0;
}
}
тут несколько сложнее ситуация, т.к. допустим, при использовании Gtk, можно обращаться к приватным полям (всё равно, что это будет, метод, виджет, или просто тупо переменная), а без использования Gtk трогать приватные поля из другой области видимости нельзя, в принципе это как раз и ожидается.
Возможно я зря гоню на Gtk, причина может быть в чём-то другом.