Hallo,
ich habe mal eine allgemeine Frage.
Ist es ein guter Stil, Logik, die die Properties der Klasse befüllt, in einen Klassenkonstruktor zu implementieren?
Oder sollte man diese Logik lieber in eine statische Methode der Klasse implementieren und diese Methode dann von außen aufrufen und die Daten dann die Klasse direkt übergeben.
Konkret bin ich mir bei folgenden Fall unsicher:
Ich möchte eine eigene Regex-Engine schreiben (weil ich Spaß dran habe und mein Regex-Wissen anwenden will).
Im ersten Schritt nehme ich den Regex-String auseinander und unterscheide zwischen Literalen, Metazeichen und Klassen ([..]).
Für Zeichenklassen (z. B.
[_0-9a-zA-Z]) habe ich nun eine Klasse in C# geschrieben, die eine Zeichenklasse repräsentiert.
Die Klasse hat folgende Properties, um eine Regex-Zeichenklasse darzustellen:
• List<char> Characters
• List<Range> Ranges
( public struct Range { public char start, end; } )
• bool IsNegated
Nun überlege ich, ob ich einen Konstruktor wie
C#-Quelltext
1: 2: 3: 4: 5: 6:
| public Class(string classString) { this.IsNegated = Class.FindOutWhetherKlassIsNegated(classString); this.Characters = Class.ExtractCharacters(classString); this.Ranges = Class.ExtractRanges(classString); } |
schreibe, der im Konstruktor den
String (z. B.
[_0-9a-zA-Z],
[^a-z] oder
\w) parst und die Properties befüllt.
Ist dies in diesem Fall eine gute Idee oder sollte ich ausschließlich einen Konstruktor
wie
C#-Quelltext
1: 2: 3: 4: 5: 6:
| Class(bool isNegated, List<char> characters, List<Range> ranges) { this.IsNegated = isNegated; this.Characters = characters; this.Ranges = ranges; } |
bereitstellen?
Oder sollte ich diese Funktionalität als statischer Methode dieser Klasse bereitstellen?
(Die oben genannten Code-Ausschnitte sind Pseudocode, und haben keinen Anspruch auf Eleganz und Performanz

)
Vielen Dank für Hinweise