سلام درود خدمت همراهان همیشگی سایت پی وی لرن . با آموزش زبان برنامه نویسی #F همراهتون هستیم. با استفاده از اینتر فیس ها می توانید متدهای که در اینتر فیس های دیگر تعریف شده اند در یک کلاس پیاده سازی نمایید. در این جلسه به 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 |
لطفا توجه داشته باشید.
مثلا
1 2 3 4 | type IPerson = abstract Name : string abstract Enter : unit -> unit abstract Leave : unit -> unit |
متد های 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! |
اینترفیس ها می توانند از یک یا چند رابط پایه به ارث برده شوند.
مثال زیر این مفهوم را نشان می دهد.
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 |
با استفاده از اینتر فیس ها در دات نت فایل هایی هستند که فقط حاوی تعاریف متدها، پروپرتی ها، رویدادها و ایندکسرها هستند. در این جلسه به Interfaces یا رابط ها در #F و سینتکس Interfaces در #F رو همراه مثال داشتیم.