Concettualmente, le registrazioni di funzioni sono molto simili alle interfacce e la maggior parte delle volte è possibile utilizzarle entrambe per risolvere un dato problema (quindi questa è una valida domanda valida per &).
Se si osservano solo gli aspetti tecnici, la più grande differenza è che le interfacce possono avere metodi generici. Questo è qualcosa che non può essere fatto utilizzando record - per esempio, non v'è alcun modo per definire una semplice registrazione di funzioni che corrispondono alla seguente:
type IFoo<'T> =
abstract Bar<'R> : 'R -> 'T
Tuttavia, in pratica, credo che le differenze più importanti sono relative all'interoperabilità e design:
- Interfacce interagire piacevolmente con C# e altri componenti di .NET
(costruzione di un # record di F di funzioni da C# sarebbe molto difficile e brutta)
- Interfacce esprimere un'intenzione diversa - sono l'interfaccia che può essere soddisfatta e implementata.
D'altra parte, i record sono raccolte di funzioni che sono create.
- I record sono utili se è necessario utilizzare la struttura
{ oldValue with NewFunction = newFunction }
per sostituire una funzione.
In generale, utilizzo principalmente record quando è necessario mantenere uno stato durante ad es. elaborazione ricorsiva di alcune strutture dati e ho bisogno del costrutto with
. Per le API pubbliche, credo che l'utilizzo di interfacce e classi semplici sia una migliore astrazione rispetto all'utilizzo di record.
fonte
2014-09-22 20:39:52