Public Member Variable VS. Property



  • Wann benutzt man Public Member Variablen und wann Propertys? Nehmen wir z.B. Folgendes Beispiel: Ich habe ein Dialog der nichts anderes machen soll als den User nach der Adresse des Proxy Servers zu Fragen und diese Daten an meine Anwendung weiter zu geben:

    public class DialogProxySettings : System.Windows.Forms.Form
    	{
    
    		private System.Windows.Forms.TextBox textBoxAddress;
    		private System.Windows.Forms.TextBox textBoxPort;
    		private System.Windows.Forms.Button buttonOk;
    		private System.Windows.Forms.Button buttonCancel;
    
    		...
    
    		#region Windows Form Designer generated code
    		...
    		#endregion
    
    		private void buttonCancel_Click(object sender, System.EventArgs e)
    		{
    			bUserHasCanceledDialog = true;
    			Dispose(true);
    		}
    
    		private void buttonOk_Click(object sender, System.EventArgs e)
    		{
    			ProxyName = textBoxAddress.Text;
    			ProxyPort = int.Parse(textBoxPort.Text);
    			Dispose(true);
    		}
    
    		public bool			bUserHasCanceledDialog = false;
    		public string		ProxyName;
    		public int			ProxyPort;
    	}
    

    meine Anwendung holt sich die Daten vom Dialog wie folgt:

    static void Main(string[] args)
    		{
    			DialogProxySettings s = new DialogProxySettings();
    			Application.Run(s);
    
    			if(!s.m_bUserHasCanceledDialog)
    			{
    				Console.WriteLine(s.m_ProxyName + ":" + s.m_ProxyPort);
    			}
    			else
    			{
    				Console.WriteLine("Dialog wurde abgebrochen");
    			}
    
    			Console.WriteLine("Press any key to continue...");
    			Console.ReadLine();
    		}
    

    vielleicht würden hier Propertys mehr sinn machen, da ich damit einen ReadOnly Zugriff auf die Variablen realisieren kann... mmmh... das könnt ich aber mit einer get Methode auch erreichen... was sollen eigentlich diese Propertys? Get und Set Methoden ablösen?



  • Wenn du mit ILDasm einen Blick auf eine Klasse mit Properties wirfst, dann wirst du sehen, dass eine Get() und eine Set() (wenn nicht readonly) Methode erstellt wurde.
    Also ja, Properties sollen Get() und Set() Methoden ersetzen.
    In deinem Fall würde ich schreiben:

    public string ProxyName {
        get { return m_ProxyName; }
    }
    public int ProxyPort {
        get { return m_ProxyPort; }
    }
    

    Es ist immer ratsamer keine public Members zu haben.


Anmelden zum Antworten