Objekte der eigenen Basisklasse als übergabeparameter

BennyBookworm

Grünschnabel
Objekte der eigenen Basisklasse als Übergabeparameter

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:
 public double ToBase <T>(double value,  T DieEinheit) where T: this.base ;

oder so
Code:
 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
 
Zuletzt bearbeitet:

Spyke

Premium-User
ToBase soll eine FUnktion sein oder?

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

MeinTyp =Typ der Basisklasse, du kannst da nicht direkt auf ein Objektverweisen
 

BennyBookworm

Grünschnabel
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. :D
(Dauert aber noch bis die ankommen)
 

Spyke

Premium-User
du must doch eh die Funktion implementieren und da kannst du das abprüfen

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

so ungefähr :rolleyes:

Edit: wieso hat die Klasse dann das IF?
 

BennyBookworm

Grünschnabel
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.
 

Spyke

Premium-User
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.