Zitat:
Es ist immer ein und dieselbe Maßeinheit mit verschiedenen Vorsätzen.
Jein, das stimmt zwar in den meisten Fällen.
Also Kg, ng, gr, m, cm, dm sind nur verschiedene Faktoren, das ist leicht.
Aber es gibt auch Ausreisser, z.B. bei Temperatur (°C, °F, °K),
das muss man mit Offset und Faktor arbeiten.
Oder bei Winkeln und Längen in diversen Darstellungsformen, z.B. der worst case ist wohl in USA mit der grässlichen inch-feet Darstellung und Brüchen derselben.
Es ist aber immer die selbe physikalische Größe. Deswegen glaube ich dass die weiter oben vorgeschlagene Möglichkeit, orientiert an System.TimeSpan.TTimeSpan, die sinnvollste Lösung ist: Sie dokumentiert um welche Physikalische Größes es sich handelt (Und garantiert dass nicht Sekunden statt Gramm übergeben werden), inklusive der exakten Maßeinheit (es wird vermieden dass ein Wert als "meter" angegeben, aber als "millimeter" interpretiert wird), und erlaubt flexible Konvertierungen (Bei Gewicht kann dies z.B. auch Pfund etc. beinhalten, bei Geschwindigkeit m/s, kmh und mph, und zwischen Kelvin, Celsius und Fahrenheit zu konvertieren ist auch kein Problem).
Einzig Operatoren würde ich außen vor lassen. Addition und Subtraktion sind vllt. noch machbar, aber bei Multiplikation&Division wirds schwierig: Bspw. muss das Multiplikationsergebnis aus Spannung und Stromfluss vom Divisionsergebnis aus Drehmoment durch Zeit subtrahierbar sein.
Guava macht das ganze übrigens
ähnlich.