Laden...

Was sind "Lokale statische Methoden"?

Erstellt von RafaelVogt vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.628 Views
R
RafaelVogt Themenstarter:in
27 Beiträge seit 2019
vor 4 Jahren
Was sind "Lokale statische Methoden"?

Hallo zusammen,

dieses o.g. Thema ist mir sehr leicht gefallen. Zum Glück. Aber, wie sollte es anders sein, beim Nachvollziehen des im Buch genanntn Beispiels kommt es zu einem Fehler:

Fehlermeldung:
Fehler CS8652 Das Feature "Statische lokale Funktionen" befindet sich zurzeit in der Vorschau und wird nicht unterstützt. Um Previewfunktionen zu nutzen, verwenden Sie die Sprachversion "Preview".

Der Code dazu:


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

namespace _2_4_Operatoren____3_Logische_Operatoren
{
    class Program
    {
        static void Main(string[] args)
        {
            
            int x = 8;
            int y = 9;

            if ((x != y) | DoSomething())
                Console.WriteLine("Bedingung ist erfüllt");
            Console.ReadLine();

            static bool DoSomething()
            {
                Console.WriteLine("in DoSomething");
                return true;
            }

            Console.ReadKey();
        }
    }
}

Ansich verstehe ich was hier passieren soll. Trotzdem wüsste ich doch gerne etwas mit der Fehlermeldung anzufangen.

Danke im Voraus (-:

Hinweis von Abt vor 4 Jahren

Es gibt kein Grund im Titel irgendeine 'Newbie' Nummerierung zu führen.
Siehe auch [Hinweis] Wie poste ich richtig?
Danke.

T
2.219 Beiträge seit 2008
vor 4 Jahren

Sicher das das Beispiel korrekt ist?
Der Compiler interpretiert dein static bool DoSomething nämlich nicht als lokale Methode sondern eben als statische lokale Variable DoSomething.
Entsprechend kommt es auch zu dieser Meldung.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

R
RafaelVogt Themenstarter:in
27 Beiträge seit 2019
vor 4 Jahren

Habs eben nochmal überprüft. Das Beispiel steht so im Buch und er meldet diesen Fehler. Ich weiß eben nur nicht, wie es richtig heißen muss, weil ich ja aus diesem Buch lerne. )-:

4.931 Beiträge seit 2008
vor 4 Jahren

Erst seit C# 7 gibt es lokale Methoden: Lokale Funktionen
Ansonsten müssen Methoden immer direkt untereinander in einer Klasse definiert werden, bei dir also unterhalb (oder oberhalb) der Main-Methode:


namespace _2_4_Operatoren____3_Logische_Operatoren
{
    class Program
    {
        static void Main(string[] args)
        {
            // ...
        }

        static bool DoSomething()
        {
            Console.WriteLine("in DoSomething");
            return true;
        }
    }
}

PS: Welches Buch verwendest du denn?

T
2.219 Beiträge seit 2008
vor 4 Jahren

Hab mal kurz in der Doku nachgelesen.
Dort werden die lokalen static Methoden seit C# 7 supportet.
Vermutlich sind deine Projekt Einstellungen nicht aktuell, weshalb du noch gegen eine alte C# Version arbeitest und der Compiler aktuelle Features nicht kennt.

Nachtrag:
Th69 war schneller 😃

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.806 Beiträge seit 2008
vor 4 Jahren

Hinweis: alle CS Fehler, die Visual Studio im Error Window anzeigt, sind vollständig dokumentiert.
Einfach den Fehler anklicken (Rechtsklick, Menüname weiß ich gerade nicht) oder F1 drücken, dann wird man auf die Doku mit der jeweiligen Lösung / Fehlerbehebung geleitet.

R
RafaelVogt Themenstarter:in
27 Beiträge seit 2019
vor 4 Jahren

C# 8 mit Visual Studio 2019

Bis jetzt bin ich auf den ersten 103 Seiten auf 5 mehr oder weniger gravierende Fehler gestoßen. 2 Davon musste ich wie diesen hier im Forum behandeln, weil es mir nicht möglich war den Fehler selber zu erkennen.

16.806 Beiträge seit 2008
vor 4 Jahren

C#8 ist standardmäßig auch nicht in Visual Studio aktiviert, sondern 7.3 (C# 8 ist auch noch nicht mal final veröffentlich, sondern kommt erst Ende September mit .NET Core 3).
Alle weiteren Versionen müssen über die Projekteinstellungen gesetzt werden (alternativ LangVersion direkt im csproj File).

Bin mir sicher, dass der Hinweis auch im Buch steht 😃

6.911 Beiträge seit 2009
vor 4 Jahren

Hallo RafaelVogt,

lokale Funktionen wurden mit C# 7 eingeführt. Durch praktischen Einsatz dieser Sprachversion wurde bemerkt, dass oft versehentliche lokale Variablen und Argumente in der lokalen Funktion verwendet wurde, worauf der Compiler dafür eine "Closure" erstellen musste. Da dies eben oft unbewusst gemacht wurde, entschied man sich mit C# 8 dem Abhilfe zu leisten und somit die "statischen lokalen Funktionen" einzuführen -- gekennzeichnet mit dem static Schlüsselwort bei der Deklaration der lokalen Funktion.

Wie bereits erwähnt und auch in der Fehlermeldung (indirekt) angegeben, muss dafür die Sprachversion 8.0 gesetzt werden. latest genügt hier nicht, es muss explizit 8.0 od. preview verwendet werden.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

R
RafaelVogt Themenstarter:in
27 Beiträge seit 2019
vor 4 Jahren

auch Dir vielen Dank (-: