2016-04-14 9 views
1

Ich bin ein Anfänger Programmierer Ich war Code schreiben mit Visual Basic.net so würde ich gerne C# lernen, könnte mir helfen, diesen Code zu lösen Hallo, was ist Fehler mit diesem Code?Enum mit Funktionsfehler

enum Day 
{ 
    Saturday, Sunday, Monday, Tuesday, Wednesday,Thursday, Friday  
} 
public static void ShowDay(Day CurrentDay) // Error 
{ 
    if (CurrentDay == Day.Friday) 
     Console.WriteLine("A vacation"); 
} 
static void Main(string[] args) 
{ 
    Day X; 
    X = Day.Friday; 
    ShowDay(X); 
    ShowDay(Day.Friday); 
} 
+2

Willkommen zu Codierung und Stackoverflow - Sie sagen uns, kompiliert es? produziert es nicht, was ist der Fehler? Bitte lesen Sie http://www.stackoverflow/help/How-to-asl – BugFinder

+0

Ist der Fehler hier 'ShowDay (X); 'oder hier' ShowDay (Day.Friday);'? –

+0

public enum Tag { Samstag, Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag } –

Antwort

4

Sie sollten Ihre enum öffentlich machen.

public enum Day 
{ 
    Saturday, Sunday, Monday, Tuesday, Wednesday,Thursday, Friday  
} 

UPD: Oder public aus dem ShowDay Verfahren entfernen.

+0

@HimBromBeere, das ist keine wahre Aussage. Wenn es "internal" ist, ist es immer noch weniger zugänglich als "public" und wird nicht kompiliert. –

+0

Wir tun, weil die public-Methode ihre Signatur der äußeren Welt aussetzt und die äußere Welt alles über den Typ des Parameters der öffentlichen Methode wissen muss, um sie auszuführen. –

+2

Oder entfernen Sie einfach public aus der Methode. – Toxantron

2

Hier ist eine funktionierende .NET Fiddle.

public enum Day 
{ 
    Saturday, 
    Sunday, 
    Monday, 
    Tuesday, 
    Wednesday, 
    Thursday, 
    Friday 
} 

public static void ShowDay(Day CurrentDay) 
{ 
    if (CurrentDay == Day.Friday) 
     Console.WriteLine("A vacation"); 
} 

public static void Main(string[] args) 
{ 
    Day X; 
    X = Day.Friday; 
    ShowDay(X); 
    ShowDay(Day.Friday); 
} 

Das Problem ist, dass Ihre Methode öffentlich war, noch die der Variablentyp des Parameters war nicht - als solche betrachtet wird „weniger zugänglich“.

aktualisieren

Die Idee ist, dass die access modifier ausrichten muss, gibt es mehrere Schlüsselszenarien zu berücksichtigen sind.

In diesem Fall haben Sie den Zugriffsmodifizierer auf der enum Deklaration weggelassen - dies ist internal für Top-Level-Typen und private für verschachtelte Typen. Wenn Sie jetzt Ihre Methode ShowDay(Day currentDay) als public definieren, bedeutet dies, dass sie jedem offen steht, der auf diese Klasse verweist. Das Problem besteht darin, dass der Parameter nicht angezeigt wird, Sie ihn jedoch als Parameter definieren. Hilft das?

Aber es wäre in Ordnung für die enum als public definiert werden und die Methode als etwas weniger als public definiert werden.

0

Sie können Ihre Methode auch intern einrichten, indem Sie entweder internal davor setzen oder einfach das Schlüsselwort public entfernen.

static void ShowDay(Day CurrentDay) // No error 

Einfach gesagt, dieser Fehler tritt auf, weil verwandte Typen und Methoden den gleichen Zugriffsmodifikator haben müssen. Also mach entweder alles öffentlich oder die Methode intern.