Autor Beitrag
Pedrito
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 22.08.07 18:14 
Hallo, liebe Foren-Mitglieder,
ich bin neu hier und auch ansatzweise in C#. Ich komme von ASP und kann an JS recht gut, was es an Objektorientiertheit hergibt. Bei C# hingegen stehe ich noch vor dem Berg, trotz drei fetter Bücher. Habe allerdings vor, übernächsten Monat einen 5-tägiggen Basiskurs zu nehmen.

Ich habe da eine Aufgabe, die ich selbst mit Google noch nicht lösen kann.

Ich schreibe eine Klasse zur Manipulation und Erzeugung von XML(auch XHTML) und setze XmlDocument und XmlElement ein.

Alle anderen Methoden laufen wunderschön, aber ich suche noch eine weitere Überladung für XmlElement.SetAttribute:

SetAttribute (string AttributeName,string AttributeValue,bool AttributeRequired)

Dabei geht es darum, dass beim Erzeugen eines Tags Null-Werte auf AttributeValue auf zwei Arten beantwortet werden sollen:
1. AttributeRequired ist false: das Attribut wurd nicht gesetzt
2. AttributeRequired ist true: die Tag-Erstellung wird abgebrochen und statt dessen ein rot umrandetes span mit dem Text error ausgegeben

Das müsste man so einsetzen können:

ausblenden C#-Quelltext
1:
2:
3:
4:
XmlElement Tag = XmlDoc.CreateElement(TagName);
Tag.SetAttribute("class",TagClass, true);
Tag.InnerText = TagContent;
return Tag;


Ist das möglich, XmlElement zu überladen(Methode hinzufügen), dass ich es wie gehabt einsetzen kann oder muss ich eine Klasse schreiben, die die anderen Methoden von XmlElement erbt und statt dessen aufgerufen wird?

Muss ich eine Exception in der Methode aufrufen und die Tag-Erstellung mit try catch umleiten oder gibt es noch andere Wege?

Wäre nett, wenn Ihr mir einen Tip geben könntet.

Grüsse
Pedrito

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 23.08.07 15:23 
Ich hab ehrlich gesagt nicht wirklich kapiert, was Du tun möchtest. Methoden zu vorhanden Klassen hinzufügen wirst Du wohl erst in C# 3.0 können (Extension Methods), also bleibt Dir nur das ableiten, sofern ich Dich richtig verstanden habe.

Was meinst Du mit der Exception? :gruebel:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 23.08.07 16:47 
user profile iconPedrito hat folgendes geschrieben:
Muss ich eine Exception in der Methode aufrufen und die Tag-Erstellung mit try catch umleiten oder gibt es noch andere Wege?
Dieser Punkt sollte, so denk ich, zeigen, dass die Logik in SetAttribute am falschen Ort ist. Du willst ja nicht je nach Daten das Attribut verändern, sondern das gesamte Element. Ich würde eine Methode basteln, die die Daten entgegennimmt und entweder das gefüllte XmlElement oder eben beim Null-Wert ein span-Element zurückgibt. Ob man das vielleicht noch mit ein wenig mehr OOP salzen könnte, kann ich von hier aus nicht beurteilen.
Pedrito Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 23.08.07 18:10 
Das wäre natürlich eine Möglichkeit, die mir aber eher unelegant erscheint:

ausblenden Quelltext
1:
Tag = MeineEigeneHobbyKlasse.SetAttribute(Tag,"class",TagClass, true);					


Auf diese wollte ich aber ausrücklich verzichten. Ebenfalls möchte ich nicht innerhalb der umschliessenden eigenen RenderTag-Methode umfangreiche if-Abfragen machen, sondern diese in die SetAttribute-Methode verlegen.

Ein Input-Feld hat ja im krassen Fall über 10 Attribute. Da möchte ich nicht jeden Wert zuerst auf null überprüfen und anschliessend erst das betreffende SetAttribute setzen, sondern diese Methode selbst sollte eine Exception auslösen.

Ableiten wäre ebenfalls okay. Wenn ich das richtig verstanden habe, würde ich dazu eine von XmlElement abgeleitete Klasse erstellen, die alle eingebauten Methoden erbt und zu der ich neue hinzufügen kann, wobei ein MeineKlasse.SetAttribute mit drei Parametern eine Überladung des vererbten XmlElement.SetAttribute mit zwei Parametern darstellen würde.

Genau hier lassen mich aber meine C#-Kenntnisse noch im Stich.

Ich hoffe, ich habe das verständlich ausgedrückt.
Übrigens zu C# 3.0: kann ich das schon auf üblichen Hosting-Servern verwenden oder sollte man da noch warten?

Das mit den Extension Methods könnte genau mein Ding sein, werde dazu gleich noch googeln. In JS kann man ja mit Prototypen arbeiten, wo man Funktionen als Klassen von aussen neue Funktionen hinzufügen kann, die auf deren öffentlichen Variablen zugreifen dürfen:
meineKlasse.prototype.nochEineMethode = new function (){

mfG
Pedrito
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 23.08.07 18:40 
user profile iconPedrito hat folgendes geschrieben:
Ein Input-Feld hat ja im krassen Fall über 10 Attribute.
Tut mir aufrichtig leid, dass ich deine Daten nicht kenne ;) .
user profile iconPedrito hat folgendes geschrieben:
Genau hier lassen mich aber meine C#-Kenntnisse noch im Stich.
Spezifiziere bitte ein wenig, beim Schreiben der Ableitung oder bei ihrer Benutzung?
user profile iconPedrito hat folgendes geschrieben:
Übrigens zu C# 3.0: kann ich das schon auf üblichen Hosting-Servern verwenden oder sollte man da noch warten?
3.0 ist nicht an .Net 3.5 gebunden. Die Assemblies sollten also bei jedem Asp.Net-Hoster funktionieren, solange du dich natürlich auf die Möglichkeiten der dort installierten Fx-Version beschränkst.
Pedrito Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 24.08.07 08:17 
Genau, die Ableitung schaffe ich noch nicht.

mfG
Pedrito