2009-11-06 27 views

Trả lời

2

Như thế này?

type MyType(x:int, s:string) = 
    public new() = MyType(42,"forty-two") 
    member this.X = x 
    member this.S = s 

let foo = new MyType(1,"one") 
let bar = new MyType() 
printfn "%d %s" foo.X foo.S  
printfn "%d %s" bar.X bar.S  

Đây là cách điển hình để thực hiện. Có constructor 'parameterful nhất' là hàm tạo ngầm, và có phần còn lại là các quá tải "mới" được định nghĩa là các thành viên trong lớp gọi vào hàm tạo ngầm.

EDIT

Có lỗi trong Beta2 liên quan đến lớp trừu tượng. Trong một số trường hợp bạn có thể làm việc xung quanh nó bằng cách sử đối số mặc định trên các nhà xây dựng ngầm, a la

[<AbstractClass>] 
type MyType(?cx:int, ?cs:string) = 
    let x = defaultArg cx 42 
    let s = defaultArg cs "forty-two" 
    member this.X = x 
    member this.S = s 
    abstract member Foo : int -> int 

type YourType(x,s) = 
    inherit MyType(x,s)  
    override this.Foo z = z + 1 

type TheirType() = 
    inherit MyType()  
    override this.Foo z = z + 1 

let foo = new YourType(1,"one") 
let bar = new TheirType() 
printfn "%d %s" foo.X foo.S  
printfn "%d %s" bar.X bar.S  
+0

vâng nhưng nó phải là một loại trừu tượng – Enes

+0

Wow, bạn nói đúng, biến nó thành một lớp trừu tượng và nó không hoạt động. Đó là một lỗi; Tôi đã nộp nó. Cảm ơn bạn đã đặt câu hỏi! – Brian

+0

tuyệt vời .... cũng không thực sự nhưng cảm ơn cho câu trả lời anyway. Trong khi chờ đợi là có một cách giải quyết để thực hiện điều này? Tôi có nghĩa là khác hơn là làm cho lớp không trừu tượng. – Enes

Các vấn đề liên quan