Laden...

Funktionen/Methoden in Konsole bzw. Forms

Erstellt von CrocodileDundee vor 5 Jahren Letzter Beitrag vor 5 Jahren 931 Views
C
CrocodileDundee Themenstarter:in
51 Beiträge seit 2018
vor 5 Jahren
Funktionen/Methoden in Konsole bzw. Forms

Hallo zusammen,
wieso muß ich eigentlich eine Funktion in einer Konsolen-App als static deklarieren,
während ich dies bei einer Funktion in einer Forms-App nicht tun muß?// Konsole:

Konsole:

    class Program
    {
        static void Main(string[] args)
        {
            SayHello();
            Console.ReadKey();
        }

        static void SayHello()
        {
            Console.WriteLine("Hello");
        }
    }

Form:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SayHello();
        }

        void SayHello()
        {
            MessageBox.Show("Hello");
        }
    }

Danke und Gruß
Frank

78 Beiträge seit 2016
vor 5 Jahren

Ich benutzte mal die OO-Begrifflichkeit "Methode".

Ob eine Methode static sein muss, hängt maßgeblich an der Klasse.
Ist eine Klasse statisch, dann werden die Methoden auch statisch deklariert.

Ob Console- oder Forms-App in beiden Fällen kannst du statische als auch nicht statische Methoden haben.

Nachtrag 10:48:
Auch deine Forms-App hat eine Program-Klasse.
Diese beinhaltet auch eine "static void Main"

Du solltest dir nochmal die Grundlagen C# und OO anschauen, dann wird es klar.

http://dotnet-paderborn.azurewebsites.net/

2.298 Beiträge seit 2010
vor 5 Jahren

Du musst Methoden überhaupt nicht statisch erzeugen. - Die Program-Klasse ist statisch, da dies die Einstiegsklasse für das Programm ist (Gilt übrigens auch bei Forms-Apps). Für statische Klassen gilt die Regel, das alle Member statisch sein müssen. Erstellst du eine Klasse, die die Programmaufgaben übernimmt, kannst du diese einfach in Main als Instanz erzeugen und aufrufen. - Die Methoden der Klasse können und sollten dann alle non-static sein.

Beispiel:


public class MyWorkerClass
{
      public void DoWork()
      {
             Console.WriteLine("1 - Mitarbeiterverwaltung");
             Console.WriteLine("2 - Kundenverwaltung");

             var input = Console.ReadLine();
             if(input == "1")
                  this.HandleEmployees();
             else if(input == "2")
                  this.HandleCustomers();
      }

      private void HandleEmployees()
      {
            EmployeeManager manager = new EmployeeManager();
            manager.Handle();
      }

      private void HandleCustomers()
      {
            CustomerManager manager = new CustomerManager();
            manager.Handle();
      }
}

static class Program
{
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main()
        {
            MyWorkerClass worker = new MyWorkerClass();
            worker.DoWork();
        }
}

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

3.170 Beiträge seit 2006
vor 5 Jahren

Hallo,

Die Program-Klasse ist statisch, da dies die Einstiegsklasse für das Programm ist (Gilt übrigens auch bei Forms-Apps).

Oder genauer, die Main-Methode muss als Einstiegspunkt in das Programm statisch sein.
Bei der Program-Klasse muss das nicht so sein (und ist es im Beispiel aus dem ersten Post ja auch nicht).

Grundsätzlich brauchst Du aber immer eine Objektinstanz, wenn Du auf etwas nicht statisches zugreifen willst - und das ist auch der Regelfall, viel static Code ist zumindest ein Indiz für schlechtes Design.

Grundsätzlich kann man aber auch die Program-Klasse instanzieren:

    class Program
    {
        static void Main(string[] args)
        {
            Program p = new Program(); // Instanz erstellen...
            p.SayHello();                        // ...und darüber zugreifen.
            Console.ReadKey();
        }

        void SayHello()
        {
            Console.WriteLine("Hello");
        }
    }

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca