Autor Beitrag
FabianClassen
Hält's aus hier
Beiträge: 11

WIN XP
Java (JEdit, NetBeans), C#(VS 2008 Express)
BeitragVerfasst: Di 16.06.09 17:30 
Hi
ich bin neu in Sachen C#, kann aber auch mäßig Java und habe mir einen leichten Einstieg erhofft.
Mein erstes Projekt sollte ein Programm werden, dass ein Passwort darauf überprüft, ob es einigermaßen sicher ist.

Mein Programm soll in der Konsole ausgeführt werden und ich habe mir eine Prozedur geschrieben, die einen Text in der Konsole zentrieren soll. Damit man bestimmen kann, ob ein LineBreak vor oder nach dem Text gesetzt werden soll, habe ich ein Enum erstellt, welches dann via Parameter übergeben werden kann und in der Prozedur ausgewertet wird.
Aber es kommt folgende Fehlermeldung und ich denke, dass diese auch durch meine Lösung mit dem Enum herbeigeführt wird.

Die Fehlermeldung lautet:
ausblenden Quelltext
1:
Inkonsistenter Zugriff: Parametertyp "PasswortChecker.Program.LineBreak" ist weniger zugreifbar als Methode "PasswortChecker.Program.CenterText(string, PasswortChecker.Program.LineBreak)"					


und das ist mein Programmcode:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
using System;
using System.Text;

namespace PasswortChecker
{
    class Program
    {
        private enum LineBreak { Before = 1, After = 2 };
        delegate void Count();

        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Yellow;
            CenterText("PasswortChecker", LineBreak.After);
            CenterText("by Fabian Classen", LineBreak.Before);
            Console.ReadKey();
        }

        public static void CenterText(string text, LineBreak lb)
        {
            int l = text.Length;
            int count = 40 - l / 2;

            Count MyCount = delegate() {
                for(int i=1; i<count; i++) {
                    Console.Write(" ");
                }
            };

            if (lb == LineBreak.Before)
            {
                Console.WriteLine("");
                MyCount();
                Console.WriteLine(text);
            }
            else if (lb == LineBreak.After)
            {
                MyCount();
                Console.WriteLine(text);
            }
        }
    }
}


Ich hoffe ihr könnt mir helfen ;)
Ich freue mich schon auf eure Antworten.

MFG
Fab
;)

_________________
Eins habe ich erkannt ... ich werde immer Schüler bleiben - ein Leben lang


Zuletzt bearbeitet von FabianClassen am Di 16.06.09 21:04, insgesamt 1-mal bearbeitet
FabianClassen Threadstarter
Hält's aus hier
Beiträge: 11

WIN XP
Java (JEdit, NetBeans), C#(VS 2008 Express)
BeitragVerfasst: Di 16.06.09 17:57 
Ich habe die Lösung für das Problem selbst gefunden.
Ich musste die enum außerhalb der Klasse definieren ;)

MFG
Fab
;)

_________________
Eins habe ich erkannt ... ich werde immer Schüler bleiben - ein Leben lang


Zuletzt bearbeitet von FabianClassen am Di 16.06.09 21:04, insgesamt 1-mal bearbeitet
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 16.06.09 19:18 
Hallo Fabian,

ich glaube, dass das nur "aus Versehen" so funktioniert. Das Problem ist die Zusammenarbeit zwischen der public-Methode CenterText und der private-Enumeration. Innerhalb der Program-Klasse mit der statischen Main-Methode wird es noch komplizierter.

Im Moment lohnt sich eine weitere Änderung vermutlich nicht; aber künftig solltest du immer genau bedenken, was als public oder private deklariert werden muss.

Gruß Jürgen
FabianClassen Threadstarter
Hält's aus hier
Beiträge: 11

WIN XP
Java (JEdit, NetBeans), C#(VS 2008 Express)
BeitragVerfasst: Di 16.06.09 20:44 
Ich habe das ganze auch mit einem public enum versucht und es hat erst geklappt, als ich die enum außerhalb der klasse im namespace definiert habe.

Siehe hier:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
using System;
using System.Text;

namespace PasswortChecker
{
    public enum LineBreak { None = 0, Before = 1, After = 2 }

    class Program
    {
        delegate void Count();

        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Yellow;
            CenterText("PasswortChecker", LineBreak.After);
            CenterText("by Fabian Classen", LineBreak.Before);

            CenterText("Zum beenden drücken sie eine beliebige Taste ...", LineBreak.Before);
            Console.ReadKey();
        }

        public static void CenterText(string text, LineBreak lb)
        {
            int l = text.Length;
            int count = 40 - l / 2;

            Count MyCount = delegate() {
                for(int i=1; i<count; i++) {
                    Console.Write(" ");
                }
            };

            if (lb == LineBreak.Before)
            {
                Console.WriteLine("");
                MyCount();
                Console.WriteLine(text);
            }
            else if (lb == LineBreak.After)
            {
                MyCount();
                Console.WriteLine(text);
            }
            else if (lb == LineBreak.None)
            {
                MyCount();
                Console.Write(text);
            }
        }
    }
}


MFG
Fab
;)

_________________
Eins habe ich erkannt ... ich werde immer Schüler bleiben - ein Leben lang