Nachdem ich beschlossen habe, meinen Int128 in C # zu implementieren, dachte ich, es wäre schön, wenn es so aussehen würde wie andere dotNet Datentypen. Aber ich konnte die folgende Funktion nicht implementieren:
Kann ich mein eigenes Suffix in C # erstellen?
Und wenn ich nicht kann .. wie kann ich es initialisieren?
d. h.
Sie können keine eigenen Suffix-Initialisierer erstellen - dies ist Teil der Sprache und in den Compiler eingebacken. Wenn Sie Ihren eigenen C # -Compiler schreiben, können Sie andererseits tun, was Sie wollen, und ihn beliebig erweitern.
Wie Sie es initialisieren würden - es hängt davon ab, wie Sie es geschrieben haben. Wenn es sich um eine Klasse handelt, müssen Sie sie mit dem Schlüsselwort new
initialisieren oder einige implizite Konvertierungen in numerische Typen mit geringerer Genauigkeit schreiben.
Wie Jon bemerkte, haben Sie keine Möglichkeit, den Wert auf einen Wert größer als ulong.MaxValue
zu setzen, ohne dass eine String-Manipulation erforderlich ist. Sie müssen auch intern in irgendeiner Form darstellen (string? Eine Anzahl von ulongs
?) Und sicherstellen, dass alle Konvertierungen und Operationen korrekt funktionieren (was ist mit Überläufen?).
Nein, Sie können in C # kein eigenes Literalformat erstellen.
Sie könnten eine implizite Konvertierung von int
, long
, uint
und ulong
haben, was Folgendes erlaubt:
, aber Sie können keine Werte größer als ulong.MaxValue
auf diese Weise angeben.
Eine implizite Konvertierung von decimal
würde einen größeren Bereich erlauben, wäre aber eine schlechte Idee, weil Sie Daten für jeden Wert verlieren würden, der nicht nur eine Ganzzahl ist.
Grundsätzlich gibt es nichts, was einen literal garantierten Ganzzahlwert größer als ulong.MaxValue
erlaubt - Sie könnten eine Zeichenkette analysieren, aber das ist nicht wirklich ideal. Alternativ könnten Sie einen Konstruktor erstellen, der zwei ulongs, einen für die unteren 64 Bits und einen für die oberen 64 Bits, übernimmt.
Nein, Suffix-Initialisierung ist nicht möglich. Dieses bisschen Niedlichkeit wird im bevorstehenden C ++ - Standard verfügbar sein ... aber ich schweife ab.
Die offensichtlichsten Optionen sind Int128(long hi, ulong lo)
und Int128(string)
.
Tags und Links c# constructor types int128