ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
422
422
EMPFEHLEN
-
08.02.08 08:52 #1
- Registriert seit
- Jun 2007
- Beiträge
- 8
Guten Morgen allseits,
ich hoffe das ich mit meinem Anliegen im richtigen unterforum gelandet bin.
Ich spiele gerade ein bissel mit C# herrum und versuche mir eine Interface für Größeneinheiten(als Klassen) zu basteln (gibts bestimmt schon in der ein oder anderen Form im Netz)
Idee dahinter ist das ich Einheiten die die selbe Größe (also z.B. eine Länge) beschreiben untereinander umrechenbar sein sollen.
Es gibt für jeden Größentyp eine abstrakte Basis-Klasse (die das IF implementiert), von der geerbt wird.
Vergleichbar sollen nur Objekte sein die von der selben Basis abstammen.
bisher hab ich mir den aufruf entweder so
Code :1
public double ToBase <T>(double value, T DieEinheit) where T: this.base ;
oder so
vorgestellt.Code :1
public double ToBase (double value, typeof(this.base) DieEinheit) ;
C# weist mich aber unnachgibieg darauf hin das diese Idee nicht mit seiner Syntax vereinbar ist
Wäre super wenn mir jemand zum geistigen durchbruch verhelfen könnte .
Gruß BennyGeändert von BennyBookworm (08.02.08 um 09:00 Uhr)
-
ToBase soll eine FUnktion sein oder?
oderCode :1 2 3
public double ToBase <T>(double value, T DieEinheit) where T: MeinTyp { }
Code :1 2 3
public double ToBase (double value, MeinTyp DieEinheit) { }
MeinTyp =Typ der Basisklasse, du kannst da nicht direkt auf ein Objektverweisen
-
08.02.08 16:34 #3
- Registriert seit
- Jun 2007
- Beiträge
- 8
Joa, schon mal danke für den Tipp.
Das Problem was ich habe ist das ich den Typ der Basisklasse nicht kenne.
Das interface ist in verschiedenen Basisklassen Implementiert, z.B. für Länge.
Von Länge erben alle anderen Längeneinheiten (Die ja untereinander umgerechnet werden können.)
Durch die Prüfung der (bis zur Laufzeit unbekannten) Basisklasse soll sichergestellt werden das z.B. nicht Liter in Meter umgerechnet werden können.
Hab mir jetzt erstmal ein paar Bücher über Designpatterns in der Bibliothek bestellt.
Mal schauen wie die Fachwelt solche Probleme löst.
(Dauert aber noch bis die ankommen)
-
Achso das sind Funktionsaufrufe fürs Interface oder wie?
Dann übergib als Typ einfach das Interface.
-
11.02.08 00:04 #5
- Registriert seit
- Jun 2007
- Beiträge
- 8
Aber nicht jede Klasse die das IF implementiert hätte ist ein zulässiger Typ.
-
du must doch eh die Funktion implementieren und da kannst du das abprüfen
so ungefährPHP-Code:if(this is MyTyp || DieEinheit is EinAndererTyp)
{
.....
return irgendwas;
}
else
throw new ArgumentExpection("Falscher Typ");

Edit: wieso hat die Klasse dann das IF?
-
12.02.08 10:29 #7
- Registriert seit
- Jun 2007
- Beiträge
- 8
Die Klasse hat das IF weil ich wenns was größeres werden könnte erst die Nötigen IF ausdenken und dann anfange Klassen daraus zusammen zu bauen.
Dass ich das ganze abprüfen könnte ist mir klar (wenn eine Instanz existiert ist das ja auch nicht weiter wild). Allerdings hätte ich es gerne wenn die IDE diese Prüfung für mich vornimmt. Und das nicht erst zur Laufzeit.
Das alles beantwortet leider nicht die Frage wie ich eine Methode deklariere die nur ein Objekt der eigenen Basisklasse als Typ akzeptiert.
-
Also entweder du erstellst ein ordentliches Objektmodell oder du musst halt damit leben das jeder der das IF implementiert hat auch die nötigen Funktionen mit implementieren muss.
Und du so die Argumente selber abprüfen musst.
Ähnliche Themen
-
Tagging in der eigenen Galerie bzw. auf der eigenen Homepage
Von Hoekie im Forum PHPAntworten: 4Letzter Beitrag: 05.12.07, 14:13 -
OOP Klassen / PHP Basisklasse
Von Metha im Forum PHPAntworten: 9Letzter Beitrag: 25.05.07, 10:58 -
Hibernate speichert NUR Basisklasse!
Von Konstantin Denerz im Forum JavaAntworten: 6Letzter Beitrag: 27.02.07, 13:36 -
[C++] Zugriff auf Basisklasse
Von Onkel Schuppig im Forum C/C++Antworten: 5Letzter Beitrag: 24.10.06, 13:36 -
Konstruktoraufruf der Basisklasse
Von Emu-Emsen im Forum PHPAntworten: 2Letzter Beitrag: 15.12.04, 11:29





Zitieren
Login





