Eine Methode aus einer Methode heraus aufrufen



  • Hallo

    Ich möchte gerne in einer Methode eine weitere Methode der selben Klasse aufrufen. Bekomme aber immer folgenden Fehler:

    Für das nicht statische Feld, die Methode oder die Eigenschaft "WindowsFormsApplication1.Form1.print(string)" ist ein Objektverweis erforderlich. E:...\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 274 12

    Was mache ich falsch?

    Hier das Beispiel:

    namespace WindowsFormsApplication1
    {
    
        public partial class Form1 : Form
        {
    
        static void dep_OnChange(object sender, SqlNotificationEventArgs e)
        {
    	....
    	print("Hallo Welt");   // Funktioniert nicht
        }   
    
        private void print(string eintrag)
        {
    	...."hier screibe ich verschiedene werte in eine Textbox"....
        }
    
        }
    }
    




  • Mach die Methode "print" mal statisch.



  • Computer schrieb:

    Mach die Methode "print" mal statisch.

    [sarkasmus]Genau, das beste ist du machst alle deine Methoden IMMER static, OOP ist voellig ueberwertet. Procedural FTW!![/sarkasmus]



  • Firefighter schrieb:

    [sarkasmus]Genau, das beste ist du machst alle deine Methoden IMMER static, OOP ist voellig ueberwertet. Procedural FTW!![/sarkasmus]

    soll ich das verstehen?

    Also mit dem static hatte ich natürlich schon vorher versucht (wäre eigentlich ja auch richtig), funktioniert aber auch nicht. Bei static kann ich nicht auf Konstanten der Klasse zugreifen. Ich erhalte immer folgenden Fehler:

    "Für das nicht statische Feld, Objekt .... ist ein Objektverweis erforderlich"

    Warum ist das so?

    Wenn ich die Methode ohne static oder public deklariere funktioniert der Zugriff allerdings.

    Verstehen tu ich das jedoch nicht.

    Gruß



  • physikus schrieb:

    Also mit dem static hatte ich natürlich schon vorher versucht (wäre eigentlich ja auch richtig), funktioniert aber auch nicht. Bei static kann ich nicht auf Konstanten der Klasse zugreifen. Ich erhalte immer folgenden Fehler:

    "Für das nicht statische Feld, Objekt .... ist ein Objektverweis erforderlich"

    Weil die Konstanten nicht statisch sind.

    Anstatt alles statisch zu machen, solltest du aber mal versuchen zu verstehen, was eine Instanz einer Klasse ist bzw. was der Unterschied zwischen statisch und nichtstatisch ist.



  • physikus schrieb:

    Firefighter schrieb:

    [sarkasmus]Genau, das beste ist du machst alle deine Methoden IMMER static, OOP ist voellig ueberwertet. Procedural FTW!![/sarkasmus]

    soll ich das verstehen?

    Also mit dem static hatte ich natürlich schon vorher versucht (wäre eigentlich ja auch richtig), funktioniert aber auch nicht. Bei static kann ich nicht auf Konstanten der Klasse zugreifen. Ich erhalte immer folgenden Fehler:

    "Für das nicht statische Feld, Objekt .... ist ein Objektverweis erforderlich"

    Warum ist das so?

    Wenn ich die Methode ohne static oder public deklariere funktioniert der Zugriff allerdings.

    Verstehen tu ich das jedoch nicht.

    Gruß

    Hauptsache WindowsForms machen aber keine Grundlagen beherrschen.



  • Bashar schrieb:

    Weil die Konstanten nicht statisch sind.

    Doch Konstante Member sind in C# implizit statisch.



  • Bashar schrieb:

    Weil die Konstanten nicht statisch sind.

    Anstatt alles statisch zu machen, solltest du aber mal versuchen zu verstehen, was eine Instanz einer Klasse ist bzw. was der Unterschied zwischen statisch und nichtstatisch ist.

    Hallo
    Du hattest recht. Ich hatte diesbezgl. wirklich eine Wissenslücke/Verständnisproblem.

    Eine statische Methode ist einmalig. Wenn ich 100 Objekte einer klasse generiere gibt es eine statische Methode wirklich nur einmal. Es wird immer auf diese eine Methode zugegriffen. Logischerweise müssen auch alle Variablen statisch sein, da auf die Methode zugegriffen werden kann ohne ein Objekt zu haben (zb mathematische Operationen). Soweit so gut....

    Nun möchte ich immer noch mit einer Methode eine Text/Listbox beschreiben. Diese Methode soll statisch sein, da unabhängig von den Objekten immer das gleiche passieren soll.

    public static void meineMethode(string text)
    		{
    		listBox1.DataSource = null;
                      listBox1.DataSource = items;
    		}
    

    Jetzt bekomme ich wieder meine Fehlermeldung
    Für das nicht statische Feld, die Methode oder die Eigenschaft "WindowsFormsApplication1.Form1.print(string)" ist ein Objektverweis erforderlich.
    weil die Listbox nicht statisch ist.

    Was mache ich nun falsch?
    Muss ich die Listbox statisch machen? Wie?
    Oder mache ich prinzipiell was falsch?

    Gruß



  • physikus schrieb:

    Nun möchte ich immer noch mit einer Methode eine Text/Listbox beschreiben. Diese Methode soll statisch sein, da unabhängig von den Objekten immer das gleiche passieren soll.

    public static void meineMethode(string text)
    		{
    		listBox1.DataSource = null;
                      listBox1.DataSource = items;
    		}
    

    Jetzt bekomme ich wieder meine Fehlermeldung
    Für das nicht statische Feld, die Methode oder die Eigenschaft "WindowsFormsApplication1.Form1.print(string)" ist ein Objektverweis erforderlich.
    weil die Listbox nicht statisch ist.

    Du hast static immernoch nicht verstanden:
    Es geht nicht darum, dass immer dasselbe passieren soll (das kann natürlich auch für nicht-statische Methoden gelten) oder der Code einmalig ist (Code ist immer einmalig), sondern darum, dass es bei statischen Methoden kein Objekt der dazugehörigen Klasse geben muss.

    Die Klasse ist jetzt eine Beschreibung von etwas, was erzeugt werden soll (ein Fenster). In dem Moment, wo Du ein Objekt erzeugst, hast Du ein Fenster, mit einer Listbox, einem Button usw. Wenn Du ein zweites Objekt erzeugst, hast Du ein weiteres Fenster, mit einer weiteren ListBox etc. Diese Listboxen sind Deine Instanzvariablen. Wenn diese static wären gäbe es nur eine Listbox, und die würde zu keinem Fenster gehören.

    Anders herum: In deiner static-Methode gibt es keine ListBox, weil die ListBox zu einem Objekt gehört. Static Methoden gehören aber zu keinem Objekt.

    Wenn Du einen Ereignishandler für ein Fenster mit einem Objekt, welches das Fenster repräsentiert, anlegen willst, darf der schlicht und ergreifend selbst nicht static sein, weil der Ereignishandler und das Fensterobjekt, auf dem das Ereignis stattfindet, zusammengehören.


Anmelden zum Antworten