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
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/
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 |
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