Laden...

Methode in Main aufrufen

Erstellt von Tidy Lobster vor 8 Jahren Letzter Beitrag vor 8 Jahren 7.539 Views
T
Tidy Lobster Themenstarter:in
13 Beiträge seit 2016
vor 8 Jahren
Methode in Main aufrufen

Hallo Community,

ich bin auf folgendes Problem gestoßen, während ich meinen Code aufteilen wollte.

Der Versuch war ganz simpel, nicht mehr alles in die Main zu schreiben, sondern Methoden und Klassen in eigene Programmteile auszulagern.

Als Beispiel habe ich mir eine Methode genommen, die zwei ganze Zahlen addiert.

Die Main:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Rechenart;

namespace Rechnung
{
    class Program
    {
        static void Main (string[] args)
        {
            int sum = Add(2, 3);
            Console.WriteLine(sum);
        }
    }
}

Die Methode:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Rechenart
{
    public class Addition
    {
       public static int Add(int a, int b)
        {
            return a + b;
        }
    }
}

Der Fehlercode CS0103 erscheint. Auf der MSDN Homepage wird eigentlich nur der Text aus Visual Studio wiederholt.

Meine Überlegungen zu dem Code waren, dass in meinen Skripten und Lehrbüchern steht, dass die Main da sie static ist, ebenfalls nur static Methoden aufrufen kann.

Nach stundenlangem recherchieren und ausprobieren, bin ich zu folgendem Code gekommen.

Die Main:

using Rechnen;

namespace Projekt_Aufteilen
{
    class Program
    {
        static void Main(string[] args)
        {

            Addition sum = new Addition();
            sum.Add(2, 3);

            Console.WriteLine(sum);

            Console.ReadKey();
        }
    }
}

Die Methode:

namespace Rechnen
{
   public class Addition
    {
        public int Add (int a, int b)

        {
            return a + b;
        }
    }
}

Visual Studio zeigt mir keinen Fehler mehr an.

Als Ausgabe in der Kommandozeile erscheint:

"Rechnen.Addition"

Ich habe viel im Internet und meinen Lehrbüchern gelesen. Diverse Versuche den Code umzuschreiben waren ebenfalls erfolglos.

Irgendetwas (oder vermutlich mehr) grundlegendes habe ich offensichtlich nicht verstanden.

Wieso wird mir kein Fehler angezeigt, wenn ich die Methode nicht als static kennzeichne und in der Main aufrufe?
Lt. Büchern etc. dürfte das nicht sein. Zitat:"Static-Methoden können nur static-Methoden aufrufen."

Zweitens wieso wird in meinem Zweiten Code Beispiel nicht die Summe ausgegeben, sondern der Methodenname?
Ich habe den Namespace angegeben, die Methode instanziiert und aufgerufen.

Bitte um Hilfe, bzw. Hinweise in welche Richtung ich mich weiter informieren muss.

Vielen Dank!

16.835 Beiträge seit 2008
vor 8 Jahren

Ja, da fehlen vermutlich so ziemlich alle Grundlagen. 😉

Im ersten Teil führst Du eine Methode Add aus, sagst aber dem Compiler nicht, wo er diese Add-Methode finde.
Deswegen auch der CS0103 Fehler. Die Beschreibung dieses Fehlers in der Hilfe sagt auch genau das aus: er findet die Methode Add nicht.

Korrekt wäre es inklusive der Angabe der Klasse.

int sum = Addition.Add(2, 3);

Vorausgesetzt, dass sich die Klasse Addition und Deine Main im selben Namespace befinden.
Aber mit dem Namespace using machst Du es hier bereits korrekt. Die fehlt nur die Angabe der Klasse.

Zum zweiten Teil: Du gibst halt auch nur den Namen aus. Du speicherst die Summe auch nirgends zwischen:

Addition sum = new Addition();
sum.Add(2, 3); // hier fängst Du nirgends das "return" ab.

Console.WriteLine(sum);

sum ist hier nicht die Summe. Die Summe ergibt sich aus der Rückgabe von Add().
Im ersten Teil hast Du nocht int sum = .. gehabt - das war korrekt. Aber warum hast Du das hier plötzlich unterschlagen?

Korrekt wäre

Addition addition = new Addition();
int sum = addition.Add(2, 3);

Console.WriteLine(sum);
T
708 Beiträge seit 2008
vor 8 Jahren

Dein allererstes Problem war, dass Du zwar die Methode statisch gemacht hast, jedoch nicht die darunterliegende Klasse:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Rechenart
{
    public STATIC class Addition
    {
       public static int Add(int a, int b)
        {
            return a + b;
        }
    }
}

Dann kannst Du auch darauf verzichten, ein Objekt (sum) erzeugen zu müssen.

16.835 Beiträge seit 2008
vor 8 Jahren

trib, das ist nicht hilfreich, denn das ist nicht sein Problem.
Sein Code wäre auch falsch, wenn die Klasse static wäre. Und Methoden können sehr wohl static sein, auch wenn es die Klasse nicht ist. Angesprochen wird sie dann identisch.

T
708 Beiträge seit 2008
vor 8 Jahren

Sein Ursprungs-Code hätte aber funktioniert, wenn er auf "Add" hätte zugreifen können.

Dort liegt das Problem aber darin, dass zwar der Namespace (Rechenart) referenziert wurde, aber nicht die Klasse angegeben war (Addition.Add() ).

Das habe ich übersehen und daher auf die statische Klasse getippt. Da gebe ich Dir aber absolut Recht, man kann natürlich auch so auf die Methode zugreifen!
Mein Fehler 😦

Der Rest sind eigentlich erst Folgefehler durch das herumprobieren. Ist nun die Frage welchen der Fehler man lösen möchte 😉

3.003 Beiträge seit 2006
vor 8 Jahren

Der Rest sind eigentlich erst Folgefehler durch das herumprobieren. Ist nun die Frage welchen der Fehler man lösen möchte 😉

*grien* Im Zweifel immer den, in dem "static" vorkommt.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

T
Tidy Lobster Themenstarter:in
13 Beiträge seit 2016
vor 8 Jahren

Leute, vielen Dank für die Hilfe. Ich verstehe jetzt meine(n) Fehler.

Ich setz mich nochmal an die Grundlagen, da fehlt's einfach noch. 😃