Autor Beitrag
BlackMatrix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Sa 15.12.12 14:56 
Hallo.

Ich habe eine Elternklasse, von denen >10 Kindklassen ableiten. Es können zusätzliche Kindklassen hinzukommen und ich möchte gerne, dass in meinen Kindklassen ErrorMessages zur Verfügung gestellt werden, die für alle Objekte dieser einen Kindklasse gleich sind (statisch). Dennoch möchte ich, dass beim Erstellen von neuen Kindklassen, auch die ErrorMessages überschrieben bzw. neu definiert werden. Demnach sollen meine ErrorMessages statisch und abstrakt sein.

Wie löst man das Problem? Über Interfaces?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 15.12.12 15:49 
Hallo BlackMatrix,

wie genau sollen die ErrorMessages denn aussehen, d.h. sind dies einfach nur Strings oder verfügen diese über eine ID?
Und wie sollen diese konkret von den Kindklassen benutzt werden?
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Sa 15.12.12 16:38 
Die ErrorMessages sollen Pattern darstellen, die in den Kindklassen abgerufen werden können. Sprich, ich definiere eine handvoll, fester ErrorPattern und ab und an muss in den Methoden der Kindklassen der darin empfangene Stream hinsichtlich dieser ErrorMessages abgeprüft werden und an den Benutzer weitergereicht werden bzw. geloggt werden.

edit: Kann man das verstehen?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
public class KindKlasse : Elternklasse
{
protected override static ErrorPattern{get{return new string[]{"Failure \d+","Failure 123";}}// o.ä.

public void Receive()
{
string s = "Sie haben Failure 123 ausgelöst!";

foreach(string errorPattern in ErrorPattern)
if(Regex.IsMatch(s,errorPattern ))
// loggen und/oder Benutzer informieren
}
}// ohne compiler entwickelt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 16.12.12 14:17 
Hallo,

leider verstehe ich es immer noch nicht richtig.
Generell denke ich bei ähnlichen Problemstellungen immer an Registrierung und Bereitstellung von Werten.

Da du ja von statisch sprichst, kommt mir als erstes der static constructor in den Sinn.
Ich würde also in der Basisklasse eine static List (oder Dictionary) mit den Standard-Fehlermeldungen bereitstellen und dann in den Kindklassen jeweils im "static constructor" diese Basisklassen-Liste hernehmen (kopieren) und die entsprechenden Änderungen vornehmen (kommt darauf an, ob dies nur statische Texte sind oder sogar noch dynamisch zusammengebaut werden müssen).

Ein anderer Ansatz wäre die Registrierung, d.h. in der Basisklasse stellst du diese Liste bereit und bietest (static protected) Methoden an, welche dann von den Kindklassen aufgerufen werden können:
- RegisterMessage(Type type, string message): als type übergibst du dann beim Aufruf jeweils typeof(Kindklasse)
- GetMessages(Type type): Rückgabe sind alle für diesen Typ registrierten Messages (sowie die Liste der Basisklassenmessages)
Die Basisklasse könnte dann intern ein Dictionary(Type, List<string>) benutzen.

Ich hoffe, meine Erklärungen sind für dich verständlich und kommen deinem Problem nahe?!