如何在F#中实现抽象类?

如何在F#中实现抽象类?,f#,abstract-class,F#,Abstract Class,看过PDC课程后,我想试着学习一些F。所以我认为最好的方法是用F重写,这是我在C语言中已经做过的,但我的大脑就是拒绝以功能模式思考。 我有一个抽象类,它有一些抽象方法和一些虚拟方法。我也想重写一些虚拟方法。这个类是用C语言编写和编译的,我不打算重写它。 所以我的问题是: 有人有一个如何实现抽象类、抽象方法和虚拟方法的简短示例吗 我可以有重载构造函数吗 如果我想在dll中编译它并使其可用于基于C#的程序,是否有任何限制 任何帮助都将不胜感激 更新: 我真的很感激布赖恩的回答,但我仍然不清楚,所以

看过PDC课程后,我想试着学习一些F。所以我认为最好的方法是用F重写,这是我在C语言中已经做过的,但我的大脑就是拒绝以功能模式思考。 我有一个抽象类,它有一些抽象方法和一些虚拟方法。我也想重写一些虚拟方法。这个类是用C语言编写和编译的,我不打算重写它。 所以我的问题是:

  • 有人有一个如何实现抽象类、抽象方法和虚拟方法的简短示例吗
  • 我可以有重载构造函数吗
  • 如果我想在dll中编译它并使其可用于基于C#的程序,是否有任何限制
  • 任何帮助都将不胜感激


    更新: 我真的很感激布赖恩的回答,但我仍然不清楚,所以我想澄清一下。让我们假设这是我用C#编写并用dll编译的抽象类。如何在F#中实现它

    公共抽象类MyAbstractClass
    {
    公共抽象人物GetFullName(字符串firstName,字符串lastName);
    公共抽象bool-TryParse(字符串全名,out-Person);
    公共虚拟IEnumerable GetChildren(个人家长)
    {
    List kids=新列表();
    foreach(人群中的儿童人)
    {
    如果(person.Parent==Parent)
    添加(儿童作为人);
    }
    归还孩子;
    }
    公共虚拟IEnumerable组的人{get;set;}
    }
    

    为寻找F#资源的人提供的一些文档: -如果其他F#有兴趣获得我在Don Syme(F#的创建者)博客上找到的一些文档。你可以下载doc格式的

    • Tomas Petricek的真实世界函数编程
    可能感兴趣的其他一些资源:

    • 职位
    • F#的地方

      • 以下是一些示例代码

        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)
        
        类型IBaz=
        抽象成员Baz:int->int
        []
        类型MyAbsClass()=
        //摘要
        抽象成员Foo:int->int
        //虚拟(具有默认值的摘要)
        抽象成员栏:字符串->整型
        默认值为.Bar s=s.长度
        //混凝土
        这个成员。Qux=x+1
        //一种实现接口的方法
        抽象成员Baz:int->int
        与IBaz接口
        成员this.Baz x=this.Baz x
        键入MySubClass(z:int)=
        继承MyAbsClass()
        覆盖这个。Foo x=x+2
        重写此.Bar s=(base.Bar s)-1
        覆盖这个。Baz x=x+100
        请记住这个。Z=Z
        new()=MySubClass(0)
        设c=newmysubclass(42)
        printfn“%d%d%d%d%d”c.Z(c.Foo 40)(c.Bar“two”)(c.Qux 41)(c.Baz 42000)
        
        一个F#抽象类也可以实现一个接口吗?实际上,我的意思是有可能让接口的抽象成员也实现一个接口。例如,将IBaz与抽象成员Baz:int->intNo进行接口,这种语法是不允许的,因为它与C#中的“抽象类C:System.IComparable{abstract int System.IComparable.CompareTo(object x);}”完全等效,这也是不允许的。
        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)