F#
Portierung von C # nach F #
Suche…
POCOs
Einige der einfachsten Klassen sind POCOs.
// C#
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime Birthday { get; set; }
}
In F # 3.0 wurden Auto-Eigenschaften eingeführt, die den C # Auto-Eigenschaften ähneln.
// F#
type Person() =
member val FirstName = "" with get, set
member val LastName = "" with get, set
member val BirthDay = System.DateTime.Today with get, set
Die Erstellung einer Instanz von beiden ist ähnlich,
// C#
var person = new Person { FirstName = "Bob", LastName = "Smith", Birthday = DateTime.Today };
// F#
let person = new Person(FirstName = "Bob", LastName = "Smith")
Wenn Sie unveränderliche Werte verwenden können, ist ein Datensatztyp viel idiomatischer F #.
type Person = {
FirstName:string;
LastName:string;
Birthday:System.DateTime
}
Und dieser Datensatz kann erstellt werden:
let person = { FirstName = "Bob"; LastName = "Smith"; Birthday = System.DateTime.Today }
Datensätze können auch basierend auf anderen Datensätzen erstellt werden, indem der vorhandene Datensatz angegeben und with
einer Liste von zu überschreibenden Feldern hinzugefügt wird:
let formal = { person with FirstName = "Robert" }
Klasse Eine Schnittstelle implementieren
Klassen implementieren eine Schnittstelle, um den Vertrag der Schnittstelle zu erfüllen. Zum Beispiel kann eine C # -Klasse IDisposable
implementieren,
public class Resource : IDisposable
{
private MustBeDisposed internalResource;
public Resource()
{
internalResource = new MustBeDisposed();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing){
if (disposing){
if (resource != null) internalResource.Dispose();
}
}
}
Um eine Schnittstelle in F # zu implementieren, verwenden Sie die interface
in der Typdefinition.
type Resource() =
let internalResource = new MustBeDisposed()
interface IDisposable with
member this.Dispose(): unit =
this.Dispose(true)
GC.SuppressFinalize(this)
member __.Dispose disposing =
match disposing with
| true -> if (not << isNull) internalResource then internalResource.Dispose()
| false -> ()