2009-11-06 9 views
5

यदि हां आप पैरामीटर रहित और "पैरामीटरफुल" कन्स्ट्रक्टर के साथ एक प्रकार का उदाहरण दे सकते हैं।। क्या एक अमूर्त प्रकार के कन्स्ट्रक्टर को अधिभारित करना संभव है?

क्या ऐसा कुछ है जिसे आप अनुशंसा करते हैं या एफ # कुछ वैकल्पिक और अधिक कार्यात्मक तरीके प्रदान करते हैं। यदि हां, तो क्या आप इसका उदाहरण दे सकते हैं?

+1

+1: "parameterfull" :) – Juliet

उत्तर

2

इस तरह?

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  

यह करने का यह सामान्य तरीका है। 'सबसे पैरामीटर' कन्स्ट्रक्टर निहित कन्स्ट्रक्टर है, और बाकी को 'नए' ओवरलोड को कक्षा में सदस्यों के रूप में परिभाषित किया गया है जो अंतर्निहित कन्स्ट्रक्टर में कॉल करते हैं।

संपादित

वहाँ सार वर्गों के बारे में Beta2 में एक बग है। कुछ परिस्थितियों में आप, अंतर्निहित निर्माता पर डिफ़ॉल्ट तर्कों का उपयोग यह काम कर सकते हैं एक ला

[<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

हाँ, लेकिन यह एक सार प्रकार – Enes

+0

वाह हो गया है, तुम सही हो, इसे एक अमूर्त वर्ग बनाओ और यह काम नहीं करता है। यह एक बग है; मैंने इसे दायर किया है सवाल पूछने के लिए धन्यवाद! – Brian

+0

महान .... वास्तव में वास्तव में नहीं, लेकिन उत्तर के लिए धन्यवाद। इस बीच यह पूरा करने के लिए एक कामकाज है? मेरा मतलब कक्षा को गैर अमूर्त बनाने के अलावा है। – Enes

संबंधित मुद्दे

 संबंधित मुद्दे