una sirve resueltos que para interfaces implementación ejercicios ejemplo desventajas clases clase abstractas abstracta f# abstract-class

sirve - ¿Cómo implementar una clase abstracta en F#?



implementación de clases abstractas (1)

Aquí hay un código de muestra

type IBaz = abstract member Baz : int -> int [<AbstractClass>] type MyAbsClass() = // abstract abstract member Foo : int -> int // virtual (abstract with default value) abstract member Bar : string -> int default this.Bar s = s.Length // concrete member this.Qux x = x + 1 // a way to implement an interface abstract member Baz: int -> int interface IBaz with member this.Baz x = this.Baz x type MySubClass(z : int) = inherit MyAbsClass() override this.Foo x = x + 2 override this.Bar s = (base.Bar s) - 1 override this.Baz x = x + 100 member this.Z = z new () = MySubClass(0) let c = new MySubClass(42) printfn "%d %d %d %d %d" c.Z (c.Foo 40) (c.Bar "two") (c.Qux 41) (c.Baz 42000)

Después de ver esta sesión de PDC, quería intentar aprender un poco de F #. Así que pensé que la mejor manera sería reescribir en F # algo que ya hice en C #, pero mi cerebro simplemente se niega a pensar en modo funcional. Tengo esta clase abstracta que tiene algunos métodos abstractos y algunos métodos virtuales. Me gustaría sobrescribir algunos de los métodos virtuales también. Esta clase está escrita en C # y compilada, y no tengo la intención de volver a escribirla i F #. Entonces mi pregunta es:

  1. ¿Alguien tiene una breve muestra de cómo implementar una clase abstracta, un método abstracto y un método virtual?
  2. ¿Puedo haber sobrecargado constructores?
  3. ¿Hay alguna restricción si quiero compilarla en un dll y ponerla a disposición de mis programas basados ​​en C #?

Cualquier ayuda sería apreciada.

Actualización: realmente aprecié mucho la respuesta de Brian, pero todavía no está claro, así que quiero aclararlo. Hagamos de cuenta que esta es mi clase abstracta escrita en C # y compilada en dll. ¿Cómo lo implemento en F #?

public abstract class MyAbstractClass { public abstract Person GetFullName(string firstName, string lastName); public abstract bool TryParse(string fullName, out Person person); public virtual IEnumerable<Person> GetChildren(Person parent) { List<Person> kids = new List<Person>(); foreach(Child person in GroupOfPeople) { if(person.Parent == parent) kids.Add(child as Person); } return kids; } public virtual IEnumerable<Child> GroupOfPeople { get; set; } }

Alguna documentación para quien esté buscando algunos recursos de F #: - si algún otro F # está interesado en obtener cierta documentación que encontré en el blog de Don Syme (creador de F #) capítulos gratuitos de su libro F # Expert . Puede descargarlos en formato doc.

Algunos otros recursos que pueden ser de su interés: