Classes are types that represent objects that can have properties, methods, and events. Classes represent the fundamental description of .NET object types; the class is the primary type concept that supports object-oriented programming in F#.
The basic syntax of the class declaration is as follows.
type [access-modifier] type-name [type-params] [access-modifier] ( parameter-list ) [ as identifier ] = [ class ] [ inherit base-type-name(base-constructor-args) ] [ let-bindings ] [ do-bindings ] member-list ... [ end ] // Mutually recursive class definitions: type [access-modifier] type-name1 ... and [access-modifier] type-name2 ... ...
type-name: It is any valid identifier.
type-params: Describes optional generic type parameters. It consists of type parameter names and constraints enclosed in angle brackets (
parameter-list: Describes constructor parameters. The first access modifier pertains to the type; the second pertains to the primary constructor. In both cases, the default is
inherit: You specify the base class for a class by using the
inheritkeyword. You must supply arguments, in parentheses, for the base class constructor.
let: You declare fields or function values that are local to the class by using
do-bindingssection includes code to be executed upon object construction.
member-list: Consists of additional constructors, instance and static method declarations, interface declarations, abstract bindings, and property and event declarations.
identifier: It is used with the optional
askeyword gives a name to the instance variable, or self identifier, which can be used in the type definition to refer to the instance of the type.
endmark the start and end of the definition are optional.
The following code shows a very simple class declaration.
type Author (firstName, lastName, age) = member this.FirstName = firstName member this.LastName = lastName member this.Age = age
The object is an instance of a class to access the defined properties and methods. It is a concrete entity based on a class and is created at runtime. You can create an object using the
new keyword followed by the name of the class.
type Author (firstName, lastName, age) = member this.FirstName = firstName member this.LastName = lastName member this.Age = age let author1 = new Author("Mark", "Upston", 25)
In F#, the constructor is considered to be just another function, so you can also call the constructor function without using the
let author2 = Author("Adrian", "Christian", 31)
You can also initialize and display data through the method as shown below.
type Author() = class let mutable firstName = "" let mutable lastName = "" let mutable age = 0 member x.Insert(fName, lName, aAge) = firstName <- fName lastName <- lName age <- aAge member x.Display = Console.WriteLine(firstName + " " + lastName + " (" + age.ToString() + ")") end let author1 = new Author() author1.Insert("Mark", "Upston", 25) author1.Display