F#
Porting C # naar F #
Zoeken…
pocos
Enkele van de eenvoudigste soorten klassen zijn POCO's.
// C#
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime Birthday { get; set; }
}
In F # 3.0 werden auto-eigenschappen geïntroduceerd vergelijkbaar met C # auto-eigenschappen,
// F#
type Person() =
member val FirstName = "" with get, set
member val LastName = "" with get, set
member val BirthDay = System.DateTime.Today with get, set
Het maken van een instantie van een van beide is vergelijkbaar,
// C#
var person = new Person { FirstName = "Bob", LastName = "Smith", Birthday = DateTime.Today };
// F#
let person = new Person(FirstName = "Bob", LastName = "Smith")
Als u onveranderlijke waarden kunt gebruiken, is een recordtype veel idiomatischer F #.
type Person = {
FirstName:string;
LastName:string;
Birthday:System.DateTime
}
En deze record kan worden gemaakt:
let person = { FirstName = "Bob"; LastName = "Smith"; Birthday = System.DateTime.Today }
Records kunnen ook worden gemaakt op basis van andere records door de bestaande record op te geven en toe te voegen with
vervolgens een lijst met velden die moeten worden genegeerd:
let formal = { person with FirstName = "Robert" }
Klasse die een interface implementeert
Klassen implementeren een interface om te voldoen aan het contract van de interface. Een C # -klasse kan bijvoorbeeld IDisposable
,
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();
}
}
}
Om een interface in F # te implementeren, gebruikt u de interface
in de typedefinitie,
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 -> ()
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow