consideri l'interfaccia:Tipo di proprietà Item in F #
type IVector =
abstract Item : int -> float
Ora, cerchiamo di definire la classe:
type DenseVector(size : int) =
let mutable data = Array.zeroCreate size
interface IVector with
member this.Item with get n = data.[n]
Che dire di fornitura di un metodo di mutare l'ingresso n-esimo del vettore denso? Quindi, sarebbe bello per modificare il codice di cui sopra come:
type DenseVector(size : int) =
let mutable data = Array.zeroCreate size
interface IVector with
member this.Item with get n = data.[n]
and set n value = data.[n] <- value
Tuttavia, ho il seguente errore a causa della firma del metodo astratto Item
nell'interfaccia IVector
:
No proprietà astratta è stato trovato che corrisponde a questo override.
Allora, che cosa dovrebbe essere la firma del Item
in IVector
?
eccellente. Grazie mille! – Allan
strano, la definizione del setter nell'interfaccia non è necessaria in C# ... –
@Mauricio, sì lo è. Cioè, è se vuoi chiamare il setter tramite l'interfaccia. E se non lo fai, e hai solo il getter nell'interfaccia, quindi è ancora illegale decommentare il setter qui: "public class V: IV {double IV.this [int x] {get {return 0.0;}/* set {} * /}} "(ricorda che tutte le interfacce in F # sono esplicite). – Brian