Fsharp Interfaces Fsharp Interfaces Fsharp Interfaces
Interfaces یا رابط ها در #F
رابط ها یک روش انتزاعی برای نوشتن جزئیات پیاده سازی یک کلاس را ارائه می دهند. و الگویی ست که روش هایی را که کلاس باید پیاده سازی و نمایش دهد را اعلام کند.
سینتکس Interface در #F
یک Interfaces مشخص کننده مجموعه ای از اعضای مرتبط است که سایر کلاس ها پیاده سازی می کنند. که سینتکس زیر را دارد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // 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 |
لطفا توجه داشته باشید.
- در یک اعلان Interfaces اعضا اجرا نمی شود.
- اعضای انتزاعی هستند، با کلمه کلیدی abstract اعلام می شود. با این حال شما می توانید اجرای پیش فرض را با استفاده از کلید واژه default ارائه دهید.
- شما می توانید با استفاده از عبارات شیء یا با استفاده از انواع کلاس ها، Interfaces ها را اجرا کنید.
در اجرای کلاس یا شی، شما باید بدنه (bodies) متد را برای روش انتزاعی رابط کاربری ارائه دهید. - کلمات کلیدی interface و end، که آغاز و پایان تعریف را نشان می دهد، اختیاری هستند.
مثال
1 2 3 4 | type IPerson = abstract Name : string abstract Enter : unit -> unit abstract Leave : unit -> unit |
روش های فراخوانی Interfaces در #F
متد های Interfaces از طریق Interfaces فراخوانی می شوند، نه از طریق نمونه کلاس یا نوع اجرای رابط.
برای فراخوانی یک متد Interfaces، با استفاده از عملکر <: (اپراتور upcast) به نوع رابط متصل می شوید.
مثال
1 2 | (s :> IPerson).Enter() (s :> IPerson).Leave() |
مثال
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | type IPerson = abstract Name : string abstract Enter : unit -> unit abstract Leave : unit -> unit type Student(name : string, id : int) = member this.ID = id interface IPerson with member this.Name = name member this.Enter() = printfn "Student entering premises!" member this.Leave() = printfn "Student leaving premises!" type StuffMember(name : string, id : int, salary : float) = let mutable _salary = salary member this.Salary with get() = _salary and set(value) = _salary <- value interface IPerson with member this.Name = name member this.Enter() = printfn "Stuff member entering premises!" member this.Leave() = printfn "Stuff member leaving premises!" let s = new Student("Zara", 1234) let st = new StuffMember("Rohit", 34, 50000.0) (s :> IPerson).Enter() (s :> IPerson).Leave() (st :> IPerson).Enter() (st :> IPerson).Leave() |
خروجی
1 2 3 4 | Student entering premises! Student leaving premises! Stuff member entering premises! Stuff member leaving premises! |
ارث بری رابط ها در #F
اینترفیس ها می توانند از یک یا چند رابط پایه به ارث برده شوند.
مثال
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | type Interface1 = abstract member doubleIt: int -> int type Interface2 = abstract member tripleIt: int -> int type Interface3 = inherit Interface1 inherit Interface2 abstract member printIt: int -> string type multiplierClass() = interface Interface3 with member this.doubleIt(a) = 2 * a member this.tripleIt(a) = 3 * a member this.printIt(a) = a.ToString() let ml = multiplierClass() printfn "%d" ((ml:>Interface3).doubleIt(5)) printfn "%d" ((ml:>Interface3).tripleIt(5)) printfn "%s" ((ml:>Interface3).printIt(5)) |
خروجی
1 2 3 | 10 15 5 |
رابط ها یک روش انتزاعی برای نوشتن جزئیات پیاده سازی یک کلاس را ارائه می دهند. و الگویی ست که روش هایی را که کلاس باید پیاده سازی و نمایش دهد را اعلام کند.رابط ها یک روش انتزاعی برای نوشتن جزئیات پیاده سازی یک کلاس را ارائه می دهند. و الگویی ست که روش هایی را که کلاس باید پیاده سازی و نمایش دهد را اعلام کند.رابط ها یک روش انتزاعی برای نوشتن جزئیات پیاده سازی یک کلاس را ارائه می دهند. و الگویی ست که روش هایی را که کلاس باید پیاده سازی و نمایش دهد را اعلام کند.