Aracılığıyla paylaş


Arabirimler (F#)

Arabirimler uygulayan diğer sınıflar ilgili üyeleri kümesi belirtin.

// Interface declaration:
[ attributes ]
type interface-name =
   [ interface ]
     [ inherit base-interface-name ...]
     abstract member1 : [ argument-types1 -> ] return-type1
     abstract member2 : [ argument-types2 -> ] return-type2
     ...
   [ end ]

// Implementing, inside a class type definition:
interface interface-name with
   member self-identifier.member1 argument-list = method-body1
   member self-identifier.member2 argument-list = method-body2

// Implementing, by using an object expression:
[ attributes ]
let class-name (argument-list) =
   { new interface-name with
       member self-identifier.member1 argument-list = method-body1
       member self-identifier.member2 argument-list = method-body2
       [ base-interface-definitions ]
   }
   member-list

Notlar

Hiçbir üyesi uygulanan dışında sınıf bildirimleri arabirimi bildirimlerini benzer. Bunun yerine, tüm üyeleri anahtar sözcüğe göre belirtildiği gibi soyut, abstract. Yöntem gövdesi için Soyut yöntemler sağlamaz. Ancak, ayrı bir üye tanımı ile birlikte bir yöntem olarak da dahil ederek bir varsayýlan uygulama sağlayabilirsiniz default anahtar sözcüğü. Bunu yaparsanız, bir taban sınıftaki diğer sanal bir yöntem yaratmak için bu nedenle eşdeğerdir.net dilleri. Sanal bir yöntem arabirimini uygulayan sınıflar içinde geçersiz kılınabilir.

Arabirim uygulamak için iki yol vardır: nesne ifadeleri kullanarak ve sınıf türleri kullanarak. Her iki durumda da, sınıf türü veya nesneyi ifade yöntem gövdeleri için arabirim Soyut yöntemler sağlar. Uygulamaları arabirimini uygulayan her türe özgüdür. Bu nedenle, arabirim yöntemleri farklı türleri birbirinden farklı olabilir.

Anahtar sözcükler interface ve end, başlangıç ve bitiş tanımının işaretlemek, isteğe bağlı hafif sözdizimini kullandığınızda. Bu sözcükleri kullanmayın, derleyici tür bir sınıf veya arabirim kullandığınız yapıları analiz ederek olup gerçekleştirip dener. Üye tanımlayın veya diğer sınıf sözdizimi kullanırsanız, bu tür bir sınıf olarak yorumlanır.

.Stil kodlama net olduğu tüm arabirimlerin büyük harf ı ile başlamak için I.

Sınıf türleri kullanarak arabirimleri uygulayan

Sınıf türü içinde bir veya daha çok arabirimler kullanarak uygulayabilirsiniz interface anahtar sözcüğü, arabirimin adını ve with tarafından arabirim üye tanımlamaları, aşağıdaki kodda gösterildiği gibi sözcüğünü,.

type IPrintable =
   abstract member Print : unit -> unit

type SomeClass1(x: int, y: float) =
   interface IPrintable with
      member this.Print() = printfn "%d %f" x y

Arabirim uygulamaları devralınır, böylece herhangi bir türetilmiş sınıflar bunları reimplement gerekmez.

Arabirim yöntemleri çaðýrmak

Herhangi bir nesne arabirimi uygulayan türü üzerinden değil yalnızca arabiriminden arabirim yöntemleri çağrılabilir. Bu nedenle, arabirim türü için yukarı çevrim kullanarak gerekebilir :> işleç veya upcast bu yöntemleri çağırmak için işleci.

Türünde bir nesne varsa, arabirim yöntemi çağırmak için SomeClass, aşağıdaki kodda gösterildiği gibi yukarı çevrim arabirim türü için nesne gerekir.

let x1 = new SomeClass1(1, 2.0)
(x1 :> IPrintable).Print()

Alternatif yöntem nesne üzerinde o upcasts bildirmek için ve aşağıdaki örnekte olduğu gibi arabirim yöntemini çağırır.

type SomeClass2(x: int, y: float) =
   member this.Print() = (this :> IPrintable).Print()
   interface IPrintable with
      member this.Print() = printfn "%d %f" x y

let x2 = new SomeClass2(1, 2.0)
x2.Print()

Nesne ifadeleri kullanarak arabirimleri uygulayan

Nesne ifadeleri bir arabirim geliþtirmek için kısa bir yol sağlar. Bunlar, adlandýrýlmýþ bir tür oluşturmak gerekmez ve yalnızca ek yöntemleri olmadan arabirim yöntemlerini destekleyen bir nesneyi istediğiniz zaman yararlı olur. Aşağıdaki kodda bir nesne ifadesi gösteriliyor.

let makePrintable(x: int, y: float) =
    { new IPrintable with
              member this.Print() = printfn "%d %f" x y }
let x3 = makePrintable(1, 2.0) 
x3.Print()

Arabirim devralma

Arabirimleri, bir veya daha fazla temel arabirimden devralabilir.

type Interface1 =
    abstract member Method1 : int -> int

type Interface2 =
    abstract member Method2 : int -> int

type Interface3 =
    inherit Interface1
    inherit Interface2
    abstract member Method3 : int -> int

type MyClass() =
    interface Interface3 with
        member this.Method1(n) = 2 * n
        member this.Method2(n) = n + 100
        member this.Method3(n) = n / 10

Ayrıca bkz.

Başvuru

Nesne ifadeleri (F#)

Sınıflar (F#)

Diğer Kaynaklar

F# dil başvurusu