Was ist C # entspricht Haskells Newtype?

8

In Haskell gibt es zwei Möglichkeiten, einen Alias ​​für Typen bereitzustellen: type und newtype . type stellt ein -Typ-Synonym zur Verfügung, was bedeutet, dass das Synonym vom Typ-Checker genauso wie der ursprüngliche Typ betrachtet wird:

%Vor%

A newtype ist ähnlich, wird aber vom Type Checker als anderer Typ betrachtet:

%Vor%

In C # können Sie Typensynonyme mit einer Deklaration using auf oberster Ebene definieren:

%Vor%

Ein stark typisierter, vom Compiler überprüfter Typalias scheint jedoch in C # standardmäßig nicht vorhanden zu sein. Ich habe die automatische Codegenerierung mit T4-Templates und CodeDOM untersucht, um einen Klassenwrapper zu generieren, aber ich weiß nicht wirklich, wie ich diese sauber in meinen Programmierfluss integrieren könnte.

Idealerweise würde ich gerne auf einer Top-Ebene sagen können:

%Vor%

Dadurch wird die Code-Generierung in Gang gesetzt zur Kompilierzeit . Wenn das nicht möglich ist oder ein Problem mit Huhn und Ei für IntelliSense darstellt, wäre eine automatische Kompilierungsoption, die alle x Minuten (oder eine Schaltfläche oder was auch immer) läuft, nett.

    
Beerend Lauwers 27.04.2015, 11:18
quelle

1 Antwort

13

Nein, C # hat keine solche Funktion. Das nächste, was Sie dazu finden können, sind Strukturen.

%Vor%

Auf diese Weise behandelt der Compiler tatsächlich UserId und int als unterschiedliche Typen. Darüber hinaus können Sie UserId weitere Methoden hinzufügen, die angesichts der Tatsache, dass Ihre int tatsächlich eine Benutzer-ID ist, sinnvoll sind. Beachten Sie auch, dass dies keine Auswirkung auf die Laufzeit hat. Die Verwendung einer Struktur mit einem einzelnen int -Feld verursacht keinen Overhead gegen die direkte Verwendung von int .

Bearbeiten: Da Sie nach T4 gefragt haben, können Sie bei der Arbeit mit Visual Studio ganz einfach eine neue T4-Textvorlage erstellen, die in (C #) - Code erweitert wird und automatisch kompiliert wird. Die Vorlage wird jedes Mal ausgeführt, wenn Sie sie speichern.

    
Georg 27.04.2015, 11:30
quelle

Tags und Links