Si lo so è un argomento molto discusso nel web. Non chiedo di sapere cosa devo fare, ma
vorrei afferrare bene il concetto di variabili public in C#.
Ho il Form1 con un button, dichiaro una string, la inizializzo, premo il button e la
visualizzo. OK.
Così come è dichiarata, s è 'private'. E' visibile in tutto il Form1 ma non agli altricodice:public partial class Form1 : Form { string s; public Form1() { s = "un ciao dal Form1"; InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { MessageBox.Show(s); } }
forms. E questo è chiaro. Se anzichè 'private' la dichiaro 'public' dovrebbe essere
visibile a tutte le altre classi, e quindi agli altri forms che non sono altro che
"altre classi".
MA QUANDO MAI!!! E invece no. Devo creare una classe "speciale" in questo modo:codice:public partial class Form1 : Form { public string s; ........ }
Ora la variabile s sarà visibile da tutti i forms e accessibile con il suo nome scodice:public static class Class1 { public static string s = "ciao da TUTTI i forms!"; }
esteso. per esempio dal Form2 dentro un Button s sarà visualizzata così:
e allo stesso modo dentro il Form1, il Form3, il Form4 ecc. ecc. ecc.codice:public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { MessageBox.Show(Class1.s); } }
Mi e vi chiedo: ma perchè non basta dichiararla public una volta sola nel Form1? Ma
allora a che serve distinguere public e private? Devo ricorrere per forza ad una terza
classe e dichiarare diavolerie tipo 'public static'...per non parlare di certe cose ben peggiori che ho letto in giro, tipo creare una istanza di Form2 che faccia riferimento al Form1 nel costruttore...bleah!
Ecco la mia domanda precisa:
Dato che:
- una variabile public è accessibile a tutte le classi
- i forms sono classi
perchè s dichiarata public in Form1 non è visibile in Form2?
Grazie.

