Property Basics



  • Moin moin,

    ich habe eine Azubine für Fachinformatik und diese hat ein paar Fragen bezüglich C# Properties. Da ich nicht hundertprozentig fit bin, frage ich ich deswegen nach. Die Fragen habe ich in dem Code geschrieben.

    using System;
    using System.Collections.Generic;
    
    namespace ConsoleApp1
    {
        class Foo
        {
            static int Counter = 0;     ///< Statische int Variable zum Debuggen 
    
            /**
             * Konstruktor
             **/
            public Foo()
            {
                mVar = 42;
            }
    
            // Property welche nur innerhalb der Klasse gesetzt und öffentlich gelesen 
            // werden kann
            public int mVar { get; private set; }
    
            // Private String Variable plus erweitertes Property
            private string _Name;
            public string mName         // Legt man hiermit eine String Variable an?
            {
                get
                {
                    return _Name;
                }
    
                set
                {
                    _Name = value;
                    Console.WriteLine("Hallo Welt\n");
                }
            }
    
    
            // Warum geht folgende Sache nicht?
    
            //private string _Name2;
            //public string mName2
            //{
            //    get;
    
            //    set
            //    {
            //        _Name2 = value;
            //    }
            //}
    
    
            public string _Name3;
            public string mName3
            {
                get
                {
                    Console.WriteLine(string.Format("{0}", Counter++));
                    return mName3;      // Wird hiermit rekursiv die get Property aufgerufen?
                }
    
                set
                {
                    _Name3 = value;
                    Console.WriteLine("Hallo Welt\n");
                }
            }
        }
    
        class Program
        {
    
    
            static void Main(string[] args)
            {
                Foo f = new Foo();
    
                Console.WriteLine(string.Format("{0}", f.mVar));
                f.mName = "Hallo";
    
                //f.mName2 = "Welt";
    
                Console.WriteLine(string.Format("{0}", f.mName3));
    
                Console.WriteLine("Hit any key");
            }
        }
    }
    
    


  • Weil dem Compiler in dem Fall nicht bekannt ist was er bei der "get;" zurückgeben soll. Nur wenn du get&set ohne Body hast erstellt er dir automatiusch ein compiler-defined backing field.

    MfG SideWinder



  • @SideWinder
    Danke für die Info. Wir haben Properties nun verstanden.


Anmelden zum Antworten