之后我看见 PDC会议上,我想尝试学到一点F#。所以我想最好的办法是重写F#中东西我已经做C#但是我的大脑只是拒绝认为在功能模式。我有这个抽象的类具有某种抽象的方法和一些虚拟方法。我想重写某些虚拟方法。这类编写和汇编和我不打算改写我F#。所以我的问题是:

  1. 任何人都不会有一个简短的样本如何实现一个抽象的类抽象的方法和虚拟方法
  2. 我可以有超载造?
  3. 是否有任何限制如果我要编制在一个dll,并提供给我的#基础的方案。

任何帮助,将不胜感激。


更新:我真的真的很感激布莱恩的答案,但它仍然不清楚我所以我想澄清。让我们假装这是我的抽象类别编写和汇编在dll。我如何实施它在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; }
}

一些文件的任何人是在寻找一些F#资源:-如果任何其他F#有兴趣获得的一些文件,我现在请赛姆的(创造者F#)的博客 免费的章节,他的书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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top