tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
422
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    BennyBookworm BennyBookworm ist offline Rookie
    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
    Code :
    1
    
     public double ToBase (double value,  typeof(this.base) DieEinheit) ;
    vorgestellt.

    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ß Benny
    Geändert von BennyBookworm (08.02.08 um 09:00 Uhr)
     

  2. #2
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    ToBase soll eine FUnktion sein oder?

    Code :
    1
    2
    3
    
     public double ToBase <T>(double value,  T DieEinheit) where T: MeinTyp
    {
    }
    oder
    Code :
    1
    2
    3
    
     public double ToBase (double value,  MeinTyp DieEinheit)
    {
    }

    MeinTyp =Typ der Basisklasse, du kannst da nicht direkt auf ein Objektverweisen
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  3. #3
    BennyBookworm BennyBookworm ist offline Rookie
    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)
     

  4. #4
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Achso das sind Funktionsaufrufe fürs Interface oder wie?
    Dann übergib als Typ einfach das Interface.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  5. #5
    BennyBookworm BennyBookworm ist offline Rookie
    Registriert seit
    Jun 2007
    Beiträge
    8
    Aber nicht jede Klasse die das IF implementiert hätte ist ein zulässiger Typ.
     

  6. #6
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    du must doch eh die Funktion implementieren und da kannst du das abprüfen

    PHP-Code:
    if(this is MyTyp || DieEinheit is EinAndererTyp)
    {
      .....
      return 
    irgendwas;
    }
    else
       throw new 
    ArgumentExpection("Falscher Typ"); 
    so ungefähr

    Edit: wieso hat die Klasse dann das IF?
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  7. #7
    BennyBookworm BennyBookworm ist offline Rookie
    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.
     

  8. #8
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    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.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 05.12.07, 14:13
  2. OOP Klassen / PHP Basisklasse
    Von Metha im Forum PHP
    Antworten: 9
    Letzter Beitrag: 25.05.07, 10:58
  3. Hibernate speichert NUR Basisklasse!
    Von Konstantin Denerz im Forum Java
    Antworten: 6
    Letzter Beitrag: 27.02.07, 13:36
  4. [C++] Zugriff auf Basisklasse
    Von Onkel Schuppig im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 24.10.06, 13:36
  5. Konstruktoraufruf der Basisklasse
    Von Emu-Emsen im Forum PHP
    Antworten: 2
    Letzter Beitrag: 15.12.04, 11:29