2010-06-18 8 views
20

Imagine la siguiente interfaz en C#:cómo implementar un miembro de interfaz que devuelve vacío en F #

interface IFoo { 
    void Bar(); 
} 

¿Cómo puedo aplicar esto en C#? Todos los ejemplos que he encontrado durante 30 minutos de búsqueda en línea muestran solo ejemplos que tienen tipos de devolución que supongo que es más común en un estilo funcional, pero es algo que no puedo evitar en este caso.

Esto es lo que tengo hasta ahora:

type Bar() = 
    interface IFoo with 
     member this.Bar() = 
      void 

error con _FS0010:

palabra clave inesperado 'vacío' en expression_.

Respuesta

22

El equivalente es la unidad que se define sintácticamente como ().

type Bar() = 
    interface IFoo with 
     member this.Bar() =() 
+0

Gracias. ¡Estoy disfrutando aprendiendo F #! –

+0

@Drew - Es un lenguaje impresionante. – ChaosPandion

+0

El código de C# era un método, no una propiedad. Para reproducir esto en F #, creo que necesita un miembro con unidad de firma -> unidad. Esto se escribiría "member this.Bar() =()". Sin el parámetro de la unidad, el F # podría ser una propiedad con un getter. – Jason

6

El tipo de retorno es necesario que haya(), así que algo como miembro de this.Bar =() debe hacer el truco

+7

Para ser pedante, el retorno _type_ es 'unidad', el único _valor_ de ese tipo se deletrea'() '. – Brian

7

Para información general sobre los tipos F #, ver

The basic syntax of F# - types

Desde esa página:

El unidad tipo tiene solo un valor, escrito "()". Es un poco como "vacío", en el sentido de que si tiene una función que solo solicita efectos secundarios (por ejemplo, printf), dicha función tendrá un tipo de devolución de "unidad". Cada función toma un argumento y devuelve un resultado, por lo que usa "unidad" para indicar que el argumento/resultado no es interesante/sin sentido.

+0

Gracias por el enlace. Incluí una cita de la página en tu respuesta. –

3

El equivalente en C# es:

type IFoo = 
    abstract member Bar: unit -> unit 
Cuestiones relacionadas