Pytanie Jak deklarujesz i używasz interfejsu znacznika w f #?


W jaki sposób replikujesz to w F #?

interface IMarker
{
    // No members here
}

class MyClass : IMarker
{
// can contain code
}

Aktualizacja: Poniższy kod definiuje interfejs znacznika, ale żadna z dotychczasowych odpowiedzi nie udaje się wyprodukować klasy, która implementuje ten interfejs znacznika (zobacz MyClass powyżej)

type IMarker = interface     end

14
2018-01-04 21:30


pochodzenie


Wytyczne dotyczące kodowania .NET zalecają ten schemat. Nie wiem dlaczego. - R. Martinho Fernandes
<sarkazm> Ponieważ korzystanie z refleksji jest o wiele łatwiejsze i szybsze, aby odkryć atrybuty </ sarcasm>. - Alexey Romanov


Odpowiedzi:


Stare pytanie, ale wymagana składnia (F # 2.0) dla tego specjalnego przypadku jest w rzeczywistości:

type IMarker = interface end

type Marker =
  class
    interface IMarker
  end

Lub alternatywnie (w tym konstruktor dla Markera):

type IMarker = interface end

type Marker() =
    interface IMarker

Właśnie pisze

type Marker =
  interface IMarker

nie jest możliwe, ponieważ wygląda na to, że chcesz utworzyć nowy typ interfejsu.


13
2018-02-23 21:37





type IMarker = interface     end
type MyClass = interface IMarker

(Aktualizacja)

F # zawsze domyślnie definiuje interfejsy, musisz rzutować na interfejs, aby z niego korzystać.

Dlaczego interfejs F # różni się znacznie od C #


9
2018-01-04 22:27





Aby uzyskać pusty typ, uważam, że będziesz musiał powrócić do składni nie światła (interfejs ... koniec).

#light

type IMarker = 
    interface
    end

type Marker =
    interface IMarker

3
2018-01-04 22:59





Z góry mojej głowy (bez rozpalania Visual Studio):

type IMarker ;

type MyClass =
  interface IMarker

-1
2018-01-04 21:41