If you want two different constructors in a derived class to call into two different constructors in a base class, then you must use the 'explicit' class syntax, where there are no parens after the type/inherit declaration, and instance variables use 'val'.

[link:msdn.microsoft.com]

Here's an example:

1
2
3
4
5
6
7
8
9
10
11
 

[<Serializable>] 
[<XmlRoot("dictionary")>] 
type SerializableDictionary<'TKey, 'TValue> = 
    inherit Dictionary<'TKey, 'TValue>
    val anotherInstanceVar : int
    new(info: SerializationInfo, context: StreamingContext) = {inherit Dictionary<'TKey, 'TValue>(info,context); anotherInstanceVar = 4}
    new() = {inherit Dictionary<'TKey, 'TValue>(); anotherInstanceVar = 0} 

This is one of the very few cases where you need to use this 'explicit' syntax rather than the preferred syntax involving a primary constructor.

By on 7/2/2009 12:47 PM ()

Thanks Brian - that works nicely.

regards,

Danny

By on 7/3/2009 8:46 AM ()
IntelliFactory Offices Copyright (c) 2011-2012 IntelliFactory. All rights reserved.
Home | Products | Consulting | Trainings | Blogs | Jobs | Contact Us | Terms of Use | Privacy Policy | Cookie Policy
Built with WebSharper